震惊!最左前缀原则失效了??

本文探讨了在Mysql8.0.23中,组合索引的最左前缀原则在某些情况下不适用的情况。作者通过实验发现,即使不满足最左前缀原则,查询也可能命中索引。这主要是因为Mysql会选择预期开销较小的方案,例如使用覆盖索引。当加入非索引字段导致无法覆盖索引时,Mysql将执行全表扫描。结论是,最左前缀原则并未失效,只是Mysql优化器会寻找最佳查询路径。
摘要由CSDN通过智能技术生成

问题

Mysql中组合索引的最左前缀原则想必大家都很熟悉,最近在学习的时候,我进行了几个小实验发现了一些很有趣的问题(测试环境为Mysql8.0.23)

表结构如下:

表里的字段只有主键索引(id)和联合索引(a,b,c

 

这个数据库表创建了(a,b,c)这个联合索引,当我们创建组合索引abc时,Mysql其实维护了3个索引:a,ab和abc。最左前缀原则要求从左至右依次命中组合索引,要能使其生效必须保证 where 条件里最左边是 a 字段,比如以下这几种情况:

  • where a = 0;
  • where a = 0 and b = 0;
  • where a = 0 and c = 0;
  • where a = 0 and b = 0 and c = 0;
  • where a = 0 and c = 0 and b = 0;

好,知道了最左前缀原则后我们进行一下小测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值