声明:本站文章均为作者个人原创,图片均为实际截图。如有需要请收藏网站,禁止转载,谢谢配合!!!

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

下载附件