mysql并不是所有的or条件查询、隐式转换都会索引失效

        索引失效的条件其中有隐式转换会导致索引失效,但是实际使用中发现有时并没有失效。比如主键是long类型,select * from xxx where id = '123',传参是字符串,mysql会将字符串准换成long但是依然会使用到索引。还有or条件查询的时候当所有的条件都建立了索引的时候索引也不会失效。

我们可以使用explain来验证一下

当索引是long类型

EXPLAIN SELECT * from t_accident where id = 202202100001

EXPLAIN SELECT * from t_accident where id = '202202100001'

所以当索引是数字类型的时候,传入字符串并不会失效,但是反过来就会失效

当索引是varchar

EXPLAIN SELECT * from t_accident where report_phone = 15214337054

 key是null

EXPLAIN SELECT * from t_accident where report_phone = '15214337054'

 or索引失效(report_phone 有索引,accident_type 无索引

EXPLAIN SELECT * from t_accident where report_phone = '15214337054' or accident_type = '1'

  or索引不失效

EXPLAIN SELECT * from t_accident where report_phone = '15214337054' or id = 202202100001

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值