bcd 联合索引,where b=1 and c=2 or c =3会走索引吗,如果c=3改为d=3

ps:如果这篇帖子对于还在找工作和找实习的你有所帮助,可以关注我,给本贴点赞、评论、收藏并订阅专栏;同时不要吝啬您的花花

索引分析:联合索引原则及两种条件下的索引执行过程

核心结论:两种情况都可能走索引,但走索引的范围和效率不同,核心取决于「联合索引最左前缀原则」和「优化器判断」,具体分析如下:

1. where b=1 and c=2 or c=3(原条件)

  • 能否走索引:部分走索引,整体可能走也可能不走(看优化器)
  • 关键原因:bcd联合索引的生效顺序是「b→c→d」(最左前缀原则,必须从最左列开始匹配);条件拆分为两部分:b=1 and c=2(满足最左前缀b、c,能精准匹配索引,走索引) 和 c=3(无b列条件,不满足最左前缀,无法使用索引,会全表扫描);优化器会判断「走索引匹配b=1 and c=2 + 全表扫描c=3」的成本,若成本低于全表扫描,会走索引;若数据量小,可能直接全表扫描。

2. 若c=3改为d=3(条件变为:where b=1 and c=2 or d=3)

  • 能否走索引:仅前半部分走索引,后半部分不走,整体逻辑同第一种情况
  • 关键原因:前半部分b=1 and c=2:满足最左前缀b、c,正常走索引;后半部分d=3:无b、c列条件,不满足最左前缀(联合索引中d是第三列,必须先匹配b、c才能匹配d),无法使用索引,仍会全表扫描;最终是否走索引,依然由优化器根据数据量、成本决定,核心还是「索引匹配部分+全表扫描部分」的综合成本。

补充关键要点

  • 联合索引生效的核心:必须从最左列(b)开始,连续匹配(b→c→d),跳过某一列则后续列无法使用索引;
  • 或逻辑的影响:或前后的条件需分别判断是否满足索引条件,只要有一部分满足,就可能触发索引使用,但未满足的部分会走全表扫描。

ps:如果这篇帖子对于还在找工作和找实习的你有所帮助,可以关注我,给本贴点赞、评论、收藏并订阅专栏;同时不要吝啬您的花花

MySQL存储引擎与索引 文章被收录于专栏

还在纠结MySQL存储引擎怎么选?选错直接拉垮系统性能!MySQL插件式存储引擎架构适配多元业务:InnoDB(默认)支持事务、行级锁,扛高并发OLTP场景;MyISAM查询快无事务,适配读多写少场景;Memory读写极速但无持久化,适合临时缓存;Archive高压缩归档日志,CSV便捷跨系统交互,NDB支撑分布式集群。本期专栏拆解各引擎核心特性与选型逻辑,教你选对引擎,让数据库性能拉满!

全部评论

相关推荐

昨天 20:19
已编辑
门头沟学院 Java
太压力了,面了2个多小时,本菜比已经被拷打的瑟瑟发抖面完两个小时后通知过了1.算法题三道(1)leetcode124 二叉树中最大路径和hard题 因为不久前才刷过撕出来了,又来了一道(2)leetcode 300 最长递增子序列变种除了递增之外还加了一个权重因素,但是思路没变,dp就行(3)寻找词汇库里符合固定长度前缀的匹配单词应该是他们自己题库的题。给了一串单词列表,然后又给了一个单词,一个下标,根据这个下标的前缀去单词列表里面找到所有匹配的单词再返回思路是创建一个单词前缀树,然后根据树找,但是可能是构件树数有问题没撕出来2.全方位项目拷打基本没有问八股,全部都是项目企业场景题,哎哟我操,完全不会。我就纯八股战士,结果没想到一道八股都没问反正尽可能把企业场景往八股上引吧。。1. 微服务多点部署其中一个宕机了怎么办2. 要是mq占据大量CPU该怎么排查?MySQL占据大量CPU该怎么排查?3. 假如说让你实现视频点赞功能,你打算怎么设计?讲讲思路(我知道多级缓存,但是碰巧没背……寄)4. Redis延迟双删是什么,分布式锁,哨兵模式5. MySQL到es同步的延迟该怎么优化6. Rabbit mq的队列是怎么实现的?(这个完全没整明白,可能是队列的底层结构? 反正我硬扯的讲了一下rabbit mq的架构)还扯了很多,但是往后完全就慌了),记住的是这些
查看9道真题和解析
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务