MySQL索引优化最佳实践
目录
1 联合索引使用姿势
2 不在查询条件索引列中做任何操作(计算,函数,类型转换)
3 尽量使用覆盖索引,减少select * 语句,避免回表查询
4 索引字段避免使用!=,<>,not in ,not exists,is null ,is not null查询,否则会走全表扫描
5 使用<,>,<=,>=时MySQL会进行成本计算评估是否使用索引
6 like查询时遵循最左前缀查询
7 尽量避免使用in或者or查询,MySQl会进行成本计算决定是否使用索引
8 范围查询优化,大范围拆分小范围
注意:
以下结论不一定完全正确;
因为MySQL执行时会进行成本计算,选择那一条执行途径
而影响成本计算的因素有表结构,数据量等
因此需要具体的情况结合explain进行分析,确定优化途径
1 联合索引使用姿势
- 在使用联合索引时,尽可能使用更多的索引字段
- 遵循最左前缀法则,查询条件从联合索引最左列开始,不跳过索引中的列
- 使用联合索引时避免左边索引字段进行范围查询
2 不在查询条件索引列中做任何操作(计算,函数,类型转换)
- left函数导致索引失效
- 隐式类型转换导致索引失效
3 尽量使用覆盖索引,减少select * 语句,避免回表查询
4 索引字段避免使用!=,<>,not in ,not exists,is null ,is not null查询,否则会走全表扫描
5 使用<,>,<=,>=时MySQL会进行成本计算评估是否使用索引
6 like查询时遵循最左前缀查询
- like字段左边存在%时导致索引失效
- 使用覆盖索引让左like可以走索引