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会自动优化顺序
