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支撑分布式集群。本期专栏拆解各引擎核心特性与选型逻辑,教你选对引擎,让数据库性能拉满!
查看11道真题和解析