1.索引列使用了计算
案例一:在 age
列新建索引
正常查询:可以看到使用了索引
不正常查询:在索引列使用了计算,可以看到未使用索引,索引失效
解决方案:可以把计算放到参数侧
2.索引列使用了函数
案例一:在 name
列新建索引
正常查询:可以看到使用了索引
不正常查询:在索引列使用了函数,可以看到未使用索引,索引失效
3.字段类型隐式转换
案例一:在 name
列新建索引
正常查询:可以看到使用了索引
不正常查询:整型转换为字符串型
4.OR查询中含有无索引的列
案例一:在 age
列新建索引, score
无索引
正常查询:可以看到使用了索引
不正常查询:使用了or,并且含有无索引的列score
5.Like查询中 % 在左侧
案例一:在 name
列新建索引
%仅在左侧:可以看到未使用索引 %张
%仅在右侧:可以看到使用索引 张%
%在两侧:可以看到未使用索引 %张%
6.联合索引不满足最左匹配原则
案例:在name
age
score
列新建联合索引
6.1 仅仅使用部分列
只有字段name:可以看到使用了索引 【长度63,使用了name】
只有字段age:可以看到未使用索引
只有字段score:可以看到未使用索引
只有字段name age:可以看到使用了索引 【长度68,使用了name age】
只有字段name score:可以看到仅使用了索引 name,未使用score 【长度63,使用了name】
6.2 使用全部列
所有字段name age score:可以看到使用了索引【长度73,使用了name age score】
即使不按照上面的顺序,只要含有了所有列,就依然还能使用索引,这是因为mysql会自动优化顺序