只要条件字段在联合索引里,MySQL8.0+ 默认都会触发 索引下推(ICP)

终极标准答案(面试直接背,100%不丢分

我把你这 3 条 SQL 一次性全部讲清楚:

会不会命中索引?用到几个?会不会索引下推?

全部给你最清晰、最准确、最严谨的结论!


先记住 2 条铁律(决定一切)

  1. 联合索引必须遵守最左前缀 ,跳过中间字段,后面字段无法用于索引查找
  2. 只要条件字段在联合索引里 ,MySQL 8.0+ 默认都会触发 索引下推(ICP),用来减少回表。

第一条 SQL

where a = 1 and c = 2; 联合索引 (a,b,c)

1. 用到哪几个索引字段?

只用到 a 字段,b 被跳过,c 无法用于索引查找!

  • a = 1 ✅ 命中(最左前缀)
  • b 没写,直接跳过
  • c = 2 ❌ 无法用于索引查找

2. 会不会用到索引下推?

会!一定会!

  • c 在联合索引里
  • 存储引擎在遍历 a=1 的索引数据时,直接在索引上过滤 c=2 ,不满足的不回表
    索引下推生效,减少回表次数

总结

命中索引:a(1个)
索引下推:生效(c 参与过滤)


第二条 SQL

where a = 1 and b > 2 and c in (1,2,3);

1. 用到哪几个索引字段?

a + b 命中,c 索引失效!

  • a =1 ✅
  • b >2 ✅(范围查询,自身有效)
  • 范围中断,后面 c 彻底失效,不能用于查找

2. 会不会索引下推?

会!

c 虽然不能用于查找,但它在索引里 ,MySQL 会在引擎层直接过滤 c in (...),不用回表。

总结

命中索引:a、b(2个)
索引下推:生效


第三条 SQL

where a =1 and b in (1,2,3) and c >3;

1. 用到哪几个索引字段?

a + b 命中,c 索引中断!

  • a=1 ✅
  • b in(等值)✅
  • c>3 范围,中断索引,不能用于查找

2. 会不会索引下推?

会!

c 在索引里,直接在索引上判断 c>3,不满足不回表。

总结

命中索引:a、b(2个)
索引下推:生效


终极汇总表(面试背这个)

SQL 命中索引字段数 索引下推(ICP)
a=1 and c=2 1个(a)
a=1 and b>2 and c in 2个(a,b)
a=1 and b in and c>3 2个(a,b)

最核心一句话(你必须记住)

  1. 最左前缀决定能不能"用索引快速查找"
  2. 字段是否在索引里,决定能不能"索引下推"
  3. 只要 c 在联合索引里,这三条 SQL 全部会触发索引下推!

面试官问:你怎么回答?(满分口述)

"联合索引(a,b,c):

  1. a=1 and c=2 :只命中 a ,跳过 b 导致 c 无法索引查找,但会用索引下推过滤 c
  2. a=1 and b>2 and c in :命中 a、b ,b 范围中断索引,c 索引失效,但会索引下推
  3. a=1 and b in and c>3 :命中 a、b ,c 范围中断索引,同样会索引下推

只要查询字段包含在联合索引中,MySQL 都会自动使用索引下推,在引擎层提前过滤,减少回表。"


相关推荐
TPBoreas6 小时前
MySQL性能优化面试全攻略
mysql·面试·性能优化
xlq223227 小时前
11.表的内外连接,索引
mysql
AllData公司负责人7 小时前
数据库同步平台|AIIData数据中台实现OceanBase、达梦数据库、OpenGauss、人大金仓、Hive、TDengine 一键接入Doris
大数据·数据库·hive·mysql·oceanbase·tdengine
wefg18 小时前
【MySQL】事务
数据库·mysql
黑白极客8 小时前
mysql的高可用性
数据库·mysql
heimeiyingwang11 小时前
【架构实战】MySQL索引优化:从慢查询到毫秒响应
数据库·mysql·架构
渣渣灰飞12 小时前
MySQL 系统学习 第二阶段 第四章:DCL(Data Control Language)第二节:权限管理与角色(Role)
数据库·学习·mysql
宠友信息13 小时前
多端即时通讯源码技术实践,Redis路由、MySQL持久化与Socket接入
spring boot·websocket·mysql·uni-app
渣渣灰飞13 小时前
MySQL 系统学习 第四阶段:MySQL 高级 第一节:索引(Index)
数据库·学习·mysql
greasyfork14 小时前
多种数据库管理混乱?Navicat Premium 17 for Mac 统一解决
数据库·mysql·macos·mac