只要条件字段在联合索引里,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 都会自动使用索引下推,在引擎层提前过滤,减少回表。"


相关推荐
Pniubi1 小时前
MySQL靠什么实现事务的?事务隔离级别有哪些?
java·数据库·mysql
aiks_yuan2 小时前
MySQL 死锁怎么排查:看懂 INNODB STATUS 死锁日志,先查后插为什么必死锁(MySQL 8.2 实测)
mysql
进击的荆棘5 小时前
MySQL——库的操作
数据库·mysql
计算机毕设定制辅导-无忧学长5 小时前
《基于Spring Boot的迷游哈游戏综合服务平台的开发》
java·vue.js·spring boot·mysql·迷游哈游戏综合服务平台
这个DBA有点耶21 小时前
函数索引的“完全一致”有多苛刻:写法、字符集、类型,差一处就失效
数据库·mysql·代码规范
星恒随风21 小时前
MySQL 从零入门(三):表的约束详解
linux·服务器·数据库·笔记·mysql
杨凯凡1 天前
MySQL 死锁怎么排查?InnoDB 锁等待与 Spring Boot 整事务重试实战
数据库·spring boot·mysql
Decay__1 天前
01_SQLServer 体系架构全解 —— 实例进程、关系引擎、SQLOS 与事务日志深入
运维·数据库·sql·mysql·架构
瑞雪兆丰年兮1 天前
JavaWeb-day07-MySQL(DQL&多表设计)
java·开发语言·数据库·sql·mysql·javaweb·web
FungLeo2 天前
成为全栈·基础补充·数据库迁移与事务:数据结构怎样安全演进
mysql·postgresql·sqlite·数据一致性·数据库事务·数据库迁移·成为全栈