一直在纠结mysql查询优化的问题,看了好多的文章思绪有点乱,到底要怎么样才会得到最优的优化语句呢。
大概我记得的
1.查询条件 = < > >= <= in 都会用到索引,但是即使是用到索引,在有的时候范围查询的时候也会进行全盘扫描使用索引,在这种范围查询时如果能显示行数的话 查询会快很多。但是这并不能解决我们的问题,这时候需要加入强制索引force index (field) 强制使用索引,在查询的时候mysql只是用一个索引进行查询,所以如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。select * from users where YEAR(adddate)<2007,将在每个行上进行运算,这将导致索引失效而进行全表扫描.只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。
2.建立适合的索引,单个索引,联合索引,全文索引,唯一索引等。索引也不能建立过多,大数量时会发生可怕的I/O读写缓慢。。。
3.表引擎的选择MYISAM,INNODB这两种表的选择,区别才有不同的数据结构方式,和不同的文件记录方式,M比较适合小表查询 读取索引文件很快找到数据,IDB表适合大数据量的存储查询,索引和数据在同一个文件,使得I/O操作很快。2表的有些区别的。
4.查看语句执行可以使用explain但是这个需要学习的。http://baike.baidu.com/view/9416916.htm
待续~~何时使用聚集索引或非聚集索引?