)
终极标准答案面试直接背100%不丢分我把你这3 条 SQL一次性全部讲清楚会不会命中索引用到几个会不会索引下推全部给你最清晰、最准确、最严谨的结论先记住 2 条铁律决定一切联合索引必须遵守最左前缀跳过中间字段后面字段无法用于索引查找。只要条件字段在联合索引里MySQL8.0 默认都会触发 索引下推ICP用来减少回表。第一条 SQLwhere a 1 and c 2;联合索引 (a,b,c)1. 用到哪几个索引字段只用到 a 字段b 被跳过c 无法用于索引查找a 1 ✅ 命中最左前缀b 没写直接跳过c 2 ❌无法用于索引查找2. 会不会用到索引下推会一定会c 在联合索引里存储引擎在遍历 a1 的索引数据时直接在索引上过滤 c2不满足的不回表→索引下推生效减少回表次数总结命中索引a1个索引下推生效c 参与过滤第二条 SQLwhere 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、b2个索引下推生效第三条 SQLwhere a 1 and b in (1,2,3) and c 3;1. 用到哪几个索引字段a b 命中c 索引中断a1 ✅b in等值✅c3 范围中断索引不能用于查找2. 会不会索引下推会c 在索引里直接在索引上判断 c3不满足不回表。总结命中索引a、b2个索引下推生效终极汇总表面试背这个SQL命中索引字段数索引下推ICPa1 and c21个a会a1 and b2 and c in2个a,b会a1 and b in and c32个a,b会最核心一句话你必须记住最左前缀决定能不能“用索引快速查找”字段是否在索引里决定能不能“索引下推”只要 c 在联合索引里这三条 SQL 全部会触发索引下推面试官问你怎么回答满分口述“联合索引a,b,ca1 and c2只命中a跳过 b 导致 c 无法索引查找但会用索引下推过滤 c。a1 and b2 and c in命中a、bb 范围中断索引c 索引失效但会索引下推。a1 and b in and c3命中a、bc 范围中断索引同样会索引下推。只要查询字段包含在联合索引中MySQL 都会自动使用索引下推在引擎层提前过滤减少回表。”