mysql索引失效_MySQL中索引失效案例详解上,挑战高薪这些是你必须知道的

mysql中使用!=号导致索引失效全表扫描案例分析:

  1. 使用"="进行查看执行结果分析
mysql>explain select * from user where name="rose";
eba8ab9c0e16dd83fd3918eb22744f88.png

结果:查询过程中使用到了索引

  1. 使用"!="进行查看执行结果分析
msyql>explain select * from user where name!="rose";
d43c39797b969d3ecedd3776a9a332cc.png

结果:我们根据执行结果查看type=All,由此得知使用!=导致索引失效,进行了全表扫描

mysql中使用is not null导致索引失效案例分析:

  1. 使用is not null 查看执行分析,首先在实际生产环境中我们不会使用is null去检索一个结果的,这里只仅仅作为一个对比
mysql>explain select * from user where name is not null ;
d0d309061863122a0b7a7181cab3652f.png

结果:没有用到索引,实际上是全表扫描

mysql中使用字符串不加索引导致索引失效案例分析:

  1. 查看表结构,name是varchar类型
e530488997934985385770e2f4153dd7.png

结果:我们看到name字段的表结构是varchar字符串类型

  1. 标准查询字符串加引号
mysql>select * from user where name="888";
1ef1b817c3ad8b1fca4807fb77ea21d8.png

结果:我们看到语句正确执行,且检索到结果

  1. 字符串不加引号查询
mysql>select * from user where name=888;
394ef2def28c61ea1e36308d8a6e5936.png

结果:我们看到语句正确执行,且检索到结果,和加引号执行检索的结果一样。

  1. 标准查询字符串加引号执行结果分析
mysql>explain select * from user where name="888";
6b3f5fc35a9acec4b2ddf6e9d2521773.png

结果:加引号执行结果可以看到,使用到了索引

  1. 字符串不加引号查询执行结果分析
mysql>explain select * from user where name=888;
d897e5901798413ca3fdc463584ac944.png

结果:没有加引号执行结果可以看到,没有使用到索引,且全表扫描执行。

延伸问题:

1、为什么加引号和不加引号都能检索出正确的结果呢?

解释:因为只执行改条sql语句的时候,在mysql底层执行过程中,发现传来的是一个整型,而该字段是字符串varchar类型,此时在数据库底层就自动执行了一次转换,所以能查出结果。

2、那为什么不加引号检索出来之后所以会失效呢?

解释:mysql底层自动将整型转换成varchar类型,为了能检索到结果,我们都知道,name字段是索引列,这种mysql底层的自动转换会导致索引失效。我前几期的文章中有专门介绍在索引列进行计算、函数、转换导致索引失效的案例,可以去查看案例分析。

点击关注发私信或评论交流文章中有问题的地方,相互学习和答疑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值