搜索
写经验 领红包
 > 运动

mysql索引失效原因(mysql索引不生效的情况)

导语:卓象程序员:MYSQL索引失效

在数据库中做查询等操作,经常发现查询很慢,但是已经在列上建了索引,最后经过研究发现,很多种情况引起了索引失效。

表结构:

如下图建立一个组合索引IDX_NAME_AGE_TEL

比如以下几种情况,将导致索引失效:

1.左前缀法则:

查询从索引的最左侧前列开始,并且不能跳过索引中的列

如上图所示:1·2·3中可以看到使用多个索引的key_len长度变化,

在图4中由于左侧列name字段没有使用索引导致全表扫描,索引失效,

在图5中由于没有使用age字段索引所以导致tel字段索引失效。

2.不能在索引上做任何操作:

计算、函数、类型转换(包括隐士转换),会导致索引失效,若最左侧索引使用会导致索引失效全表扫描。

图1:对name字段进行了函数操作,索引失效导致全表扫描。

图2:tel字段是char类型,书写方式是数字类型的书写方式,MYSQL进行了隐式数据操作导致索引失效。

3. 范围查询:

(!=, <> ,>,<)和is not null 条件语句会导致右侧索引失效,若最左侧索引使用会导致索引失效全表扫描。

4. like

like以通配符开头('%abc')会导致自身与右侧索引失效,若最左侧索引使用会导致索引失效全表扫描。使用like 需要('abc%'),使用覆盖索引可以使最左侧字段使用like以通配符开头('%abc')生效。

5. 少用or,用它来连接时索引会失效。

本文内容由快快网络小葵创作整理编辑!