卓象程序员 | 哈尔滨IT培训 | 品质教育,口碑传承 | 为做出口口相传,好口碑的教育品牌而奋斗!

卓象程序员让每一位学员高薪就业 联系我们13101507057

加微信,了解详情
您所在的位置:首页 > 文章 >卓象技术

「卓象程序员」MYSQL索引失效
时间: 2019-10-23 09:08:26     来源: 卓象IT实训基地【原创】


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

表结构:

如下图建立一个组合索引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,用它来连接时索引会失效。



每日分享技术干货~

报名卓象免费训练营课程

学习最新热门IT技术

找一份自己满意的高薪工作

15天免费学习!!

卓象程序员

★ 零基础,随时体验

★ 免费试听,满意后再报名

★ 小班授课,学习氛围浓厚

★ 口碑相传,80%学员来自口碑推荐

★ 教学严管,闯关式学习保障学习效果

★ 公司地点,哈尔滨市东直路123号7楼