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' 不能用的道理一样。
两个加分概念
覆盖索引:查询的列都在索引里,不需要回表。EXPLAIN 中 Extra 显示 Using index。
索引下推(ICP):MySQL 5.6 的特性,把部分过滤条件下推到存储引擎层,减少回表次数。
面试时的回答框架
- 先说 B+Tree 的排序特性
- 用联合索引的存储顺序解释最左前缀
- 举正反面例子
- 提覆盖索引和索引下推
索引是数据库的基础,理解透了面试基本不会翻车。
评论
评论已关闭。