PHP程序员

mysql优化

2016-12-22  本文已影响75人  Gundy_

MYSQL优化

  1. 为查询缓存优化你的查询
  2. EXPLAIN你的SELECT查询。根据结果给出分析相应的查询优化
  3. 当只要一行数据时使用LIMIT1,MySQL数据库引擎会在找到一条数据后停止搜索,而不是继续往后查少下一条符合记录的数据。
  4. 为搜索字段建索引
  5. 在Join表的时候使用相当类型的数据,并将其索引
  6. 千万不要ORDER BY RAND()
  7. 避免 SELECT * 8. 永远为每张表设置一个ID,为数据库里的每张表都设置一个ID做为其主键,而且最好的是一个INT型的(推荐使用UNSIGNED),并设置上自动增加的AUTO-INCREMENT标志
  8. 使用ENUM而不是VARCHAR
  9. 从PROCEDURE ANALYSE()取得建议
  10. 尽可能的使用NOT NULL
  11. Prepared Statements,Prepared Statements可以检查一些你绑定好的变量,这样可以保护你的程序不会受到“SQL注入式”攻击。当然,你也可以手动地检查你的这些变量,然而,手动的检查容易出问题,而且很经常会被程序员忘了。当我们使用一些framework或是ORM的时候,这样的问题会好一些。
  12. 无缓冲的查询,mysql-unbuffered-query()发送一个SQL语句到MySQL而并不像mysql-query()一样去自动fethch和缓存结果。这会相当节约很多可观的内存,尤其是那些会产生大量结果的查询语句,并且,你不需要等到所有的结果都返回,只需要第一行数据返回的时候,你就可以开始马上开始工作于查询结果了。
  13. 把IP地址存成UNSIGNED INT
  14. 固定长度的表会更快,固定长度的表会提高性能,因为MySQL搜寻得会更快一些,因为这些固定的长度是很容易计算下一个数据的偏移量的,所以读取的自然也会很快。而如果字段不是定长的,那么,每一次要找下一条的话,需要程序找到主键。可能会浪费空间
  15. 垂直分割,“垂直分割”是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的。
  16. 拆分大的DELETE或INSERT语句,这两个操作是会锁表的,表一锁住了,别的操作都进不来了。
  17. 越小的列会越快
  18. 选择正确的存储引擎
  19. 用一个对象关系映射器(Object Relational Mapper)
  20. 小心“永久链接” mysql-pconnect()
上一篇下一篇

猜你喜欢

热点阅读