MySQL中SQL优化的原则如下:
原则1、尽量全值匹配
例如表中有a、b、c字段的组合索引,where后面的条件要尽量覆盖到a、b、c。 如下图:
原则2、最佳左前前缀原则
例如在表中有a、b、c字段的组合索引。 查询条件中会优先找有没有a;如果没有则不命中索引,如果有命中索引并再找b,依次往下推(匹配结果遵从原则1,匹配的越多,效率越高)。
原则3: 不要在索引列上做任何操作
在索引列上的任何操作都会导致索引失效,如图:
原则4:范围条件放在最后
范围条件会导致,该条件后面所有条件都不走索引了。
如在表中有a、b、c字段的组合索引, 查询条件为 where a= 1 and b> 1 and c=1 只有a、b会用到索引,如果 换成
where a= 1 and c=1 and b> 1 a、b、c都可以用到索引。如下图:
原则5:尽量用覆盖索引
覆盖索引(查询的列为索引列或索引列的子集)
如在表中有a、b、c字段的组合索引, [select a, b,c ... ] [select a, c ] 都会用到覆盖索引
尽量少用select * 。如图:
原则6:不等于(!= 与 <>) 要少用
在mysql中使用!= 与 <>的时候无法走到索引。如下图:
原则7:Null与Not null 对性能有影响
表列为not Null ,查询条件为is null 和is not null 时都会导致索引失效
表列为运行Null
查询条件为is null可以走到索引。
查询条件为 is not null时会使索引失效。
原则8:注意like查询条件
like条件中以%开头会引起索引失效;不用%开头(不用%或者以%结尾)可以使用索引。
原则9:字符类型一定要加引号呀。
字符不加引号会引起索引失效。
原则10: 用union 替换or 可以提高效率