MySQL 索引面试核心:为什么最左前缀匹配是面试最爱问的?

MySQL 索引的面试题绕不开「最左前缀」。

联合索引的存储结构

假设有一个联合索引 (a, b, c),它在 B+Tree 中先按 a 排序,a 相同的按 b 排序,b 相同的按 c 排序。就像字典——先拼音首字母、再第二个字母、再第三个字母。

哪些查询能用到这个索引

-- ✅ 能用:从 a 开始(最左列)
WHERE a = 1

-- ✅ 能用:a = 常量,b 可以范围查询
WHERE a = 1 AND b > 2

-- ✅ 能用:a 和 b 都有等值条件
WHERE a = 1 AND b = 2

-- ❌ 不能用:跳过了 a
WHERE b = 2

-- ❌ 不能用:范围查询后的列无法用索引
WHERE a > 1 AND b = 2  -- b 用不到索引

为什么叫「最左前缀」

因为索引先按最左边的列排序。就像查字典,你不知道第一个字母,就没法用拼音索引。跟 LIKE 'abc%' 能用索引但 LIKE '%abc' 不能用的道理一样。

两个加分概念

覆盖索引:查询的列都在索引里,不需要回表。EXPLAINExtra 显示 Using index

索引下推(ICP):MySQL 5.6 的特性,把部分过滤条件下推到存储引擎层,减少回表次数。

面试时的回答框架

  1. 先说 B+Tree 的排序特性
  2. 用联合索引的存储顺序解释最左前缀
  3. 举正反面例子
  4. 提覆盖索引和索引下推

索引是数据库的基础,理解透了面试基本不会翻车。

关于 Zihao Zhang

后端开发工程师。关注 Java/Spring Boot/Redis/MySQL 技术栈,分布式系统,OLAP 数据库,AI Agent 开发与应用。

评论

评论已关闭。