优化SQL,其实是优化查询优化器,使其按照我们的想法,帮助我们选折最优的执行方案
优化建议
- EXPLAIN
写在SQL前面,可以查看SQL的查询计划
- in 包含的值不应太多
MySQL对于IN做了相应的优化,是将IN的常量存储于一个数组中,并且有序排列,如果此时数值较多,产生的消耗就会很多
优化建议: 如果可以使用范围,就用范围表示
- SELECT语句尽可能标明字段名称
SELECT * 增加很多不必要的消耗;增加了使用覆盖索引的可能性,所以尽可能在SELECT后跟上的是字段名,而不是*
- 如果where条件中其他字段没有索引,尽量少用or
or两边的字段中,如果有一个不是索引字段,而其他条件也不是索引字段,会造成该查询不走索引的情况。很多时候使用union all或者是union(必要的时候)的方式来代替“or”会得到更好的效果
- 区分in和exists、not in和not exists
- 使用合理的分页方式以提高分页的效率
可以设置下一页的起点从而提高效率
- 避免在where子句中对字段进行null值判断
一旦条件中有null,那么就会导致引擎放弃索引而进行全表扫描
- 避免在where子句中对字段进行表达式操作
会导致引擎放弃索引而进行全表扫描
- 对于联合索引来说,要遵守最左前缀法则
where字句中出现最频繁的列放在最左边,如创建[A, B, C]联合索引,相当于创建了 (A)(A, B) (A, B, C) 这三种情况的索引
- 注意范围查询语句
对于联合索引来说,如果存在范围查询,比如between、>、<等条件时,会造成后面的索引字段失效
网友评论