mysql模糊查询索引失效_MySql学习笔记(九):索引失效

本文详细探讨了MySQL中导致索引失效的各种情况,包括:复合索引丢失第一列字段、跳过中间字段、在索引上进行计算、函数、类型转换操作、使用范围导致后续索引失效、不等于操作、is not null判断以及前导模糊查询。通过实例分析,揭示了如何避免这些情况以提高查询效率。
摘要由CSDN通过智能技术生成

数据准备:CREATE TABLE `t_blog` (

`id` int(11) NOT NULL auto_increment,

`title` varchar(50) default NULL,

`typeId` int(11) default NULL,

`a` int(11) default '0',

PRIMARY KEY  (`id`),

KEY `index_1` USING BTREE (`title`,`typeId`,`a`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

1、复合索引丢失第一列字段:

327c11e187b2a8b7564527693008369a.png

2、复合索引,跳过中间字段:

先来看查询条件只有第一列时的结果:

c133b0738e86a6cc2f5088c746069950.png

接下来执行跳过中间字段的情况:

0e4e3ca775b5cb0ee1e2c36a454980c5.png

此时索引确实生效,但key_len依旧是153,理论上查询精度越大key_len会越大,但此时并没有增大就表示条件【a='123'】上的索引并没有用到。

复合索引应当遵守【最左前列原则】,即:查询应该从索引的最左前列开始并且不能跳过中间列,一旦跳过某个列,该列之后的列上的索引都会失效

3、在索引上进行计算、函数、类型转换等操作导致索引失效:

使用函数:

d42fedcbeb0705dcdc902cd2a1823e1d.png

进行自动类型转换,title定义的是varchar类型,但查询时给他赋值int导致mysql会自动给他进行类型转换导致索引失效

928543729087edd5d543a581a9200048.png

使用  + - * / 等计算

1b89392585ce043a3b0dcf701b91492d.png

4、使用了范围导致该索引之后的索引失效

先来看一下没使用范围的sql执行情况:

32ef166a5ad7bf72342379a0262552dc.png

随着查询精度的增大,key_len增大,表示两个条件的索引均有效,现在在范围之后再添加一个查询条件:

17e9097551890c14318b9eaea57e8a4b.png

key_len依旧保持158,说明票【a=1】这个条件上的索引是失效的。

5、使用不等于操作(!= 或 <>)

19a1e4ed68ad5940dd42d3e11417040d.png

6、使用 is not null

ed370aed77f3cdadcbc326b15a600f25.png

7、使用前导模糊查询

先来看后导查询:

b10fe090d05b1ce0d6bc85ec29fc68c2.png

此时索引并没有失效,再来看前后导模糊查询:

afc9525d4d180bd60dee3df5efcb7670.png

此时索引已经失效,那么单独使用前导查询:

e2bdc9407dc7d20678e99cf11e5a0420.png

此时索引失效,因此,使用前导查询会导致索引失效。

8、mysql不走索引会有更好的查询性能时索引失效

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值