mysql使用索引。并未命中

今天在给项目看板查询语句增加索引的时候,发现了一个很有趣的问题。如下:

我这样创建索引,就可以使用,但是我另外一个查询语句,需要使用到factory_id和plan_start_date。于是我就移动了索引顺序,这样遵守左前缀法则,也能用到这个索引。可是。可是!

出现了这一幕:

对,你没看错,我就换了一个索引顺序,它就走了全表,557次比较啊,原来也就35次。所以我就很费解啊,这是为毛呢????

直到我查了几个博客:

然后说不一定会使用索引,查询出来的数据太多后,也会直接走全表扫描。然后我就想,为啥换了一个索引顺序,就会增加如此之多的数据。

我就一个一个字段的使用,挨个挨个看。发现:

只有小于时间操作的时候,才会索引失效,我就瞬间悟了,因为我的时间参数太大了使用小于后,会有很多数据,但是如果是plan_end_date字段在索引顺序的前面,就不会有这么多,是因为我对这个字段用的全是>=。对于plan_start_date是<=。

而当我把plan_start_date排在plan_end_date前面是,mysql底层的索引树是会按照最左前缀法则,挨个比较,不管我的sql语句顺序咋样的,所以比较出来就会有很多数据,导致索引失效。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值