一直在纠结mysql查询优化的问题,看了好多的文章思绪有点乱,到底要怎么样才会获得最优的优化语句呢。 mysql
大概我记得的 sql
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 学习
待续~~什么时候使用汇集索引或非汇集索引? 大数据