Mysql中九种索引失效场景分析

表数据:
Mysql中九种索引失效场景分析_第1张图片
索引情况:
在这里插入图片描述
其中a是主键,对应主键索引,bcd三个字段组成联合索引,e字段为一个索引

情况一:不符合最左匹配原则

在这里插入图片描述
去掉b=1的条件后就不符合最左匹配原则了,导致索引失效
在这里插入图片描述

情况二:不正确的like查询

正常使用like:
在这里插入图片描述
不正确使用like:
在这里插入图片描述
当使用like模糊查询时,如果不以%或者_开头进行查询的话,索引还是有效的。

对索引进行了计算或者使用了函数

在这里插入图片描述
在这里插入图片描述

对索引进行了类型转换

e字段的类型是varchar类型,下面这个sql需要把e字段中的字符转换为数字,会导致索引失效
在这里插入图片描述

使用<>不等于导致索引失效

Mysql中九种索引失效场景分析_第2张图片
使用b=1时,索引有效,使用b<>1时索引失效

order by导致索引失效

就算利用索引,但是由于select * 所以需要回表查询(MySQL回表是一个数据库查询优化的概念,主要是针对数据表中所使用的索引并不能覆盖查询语句中所需要的所有字段而引发的问题。这时,MySQL就需要回到数据表中重新查找需要的数据,这也就是回表的含义。),而且回表成本比较高,所以不会走索引。
在这里插入图片描述
如果是select b就不需要回表了,此时就会选择走索引
在这里插入图片描述

使用or会导致索引失效

Mysql中九种索引失效场景分析_第3张图片

select * 导致查询失效

Mysql中九种索引失效场景分析_第4张图片

范围查询数据量过多导致索引失效

新增一些数据:
Mysql中九种索引失效场景分析_第5张图片
Mysql中九种索引失效场景分析_第6张图片

你可能感兴趣的:(java)