> 运动
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,用它来连接时索引会失效。
本文内容由快快网络小葵创作整理编辑!