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


相关推荐
凯凯姜8 小时前
MySQL 联合索引设计与索引失效
数据库·mysql
小羊没烦恼!12 小时前
异步编程:线程概述及使用
java·开发语言·mysql·算法·c#
这个DBA有点耶12 小时前
Redo Log循环写与checkpoint推进:长事务阻塞下的Checkpoint风暴完整链路
数据库·mysql·代码规范
梦影_13 小时前
MySQL进阶教程(一)—— 储存过程与触发器(上)
开发语言·数据库·后端·sql·mysql·中间件
stark张宇14 小时前
库存扣减的“锁”事:悲观锁、乐观锁、分布式锁
redis·分布式·mysql
qq_白羊座14 小时前
口头说的 JSON 和 MySQL 里的 JSON
数据库·mysql·json
花间相见16 小时前
【计算基础|MySQL11】事务与隔离级别
sql·mysql·adb·架构
eleven_4u16 小时前
MySQL引擎层是如何工作的
数据库·mysql
计算机毕设定制辅导-无忧学长18 小时前
《基于微信小程序的个人智能刷题助手的设计与实现》
java·spring boot·mysql·微信小程序·uniapp·个人智能刷题助手系统
geovindu18 小时前
sql:Managing Complex Joins and Subqueries in SQL using mysql 9.0
大数据·数据库·数据仓库·sql·mysql·数据库开发·数据库架构