← 每日面试题 学习看板

什么是最左前缀匹配?为什么要遵守?

面试题/03数据库中间件/01MySQL/03索引设计与优化(核心面试点)/什么是最左前缀匹配?为什么要遵守?.md

面试记录 2026-09-07

题目:什么是最左前缀匹配?为什么要遵守?

难度:difficulty/low

标签:db/mysql/index, mysql/index, difficulty/low

评分:⭐⭐⭐☆☆(3/5)

我的回答

最左匹配本质上就是索引是从前往后建的,顺序也是从往前后排的。这个前也就是左侧,所有东西从左侧开始排,它展现的结果也就是最左匹配了,后边的匹配不到,这就是所谓最左前缀匹配的逻辑。这东西本质上是创建索引排序的规则,排序本身是需要根据字段顺序来排的,它本身排序的顺序就是从左往右一点点光键的,所以导致它只能从左往右排

点评

优点:

不足:

完整讲解

第一部分:知识重点剖析

核心考点定位:考察对联合索引在 B+ 树中的物理排列方式的理解,以及能否将底层数据结构映射到 SQL 查询行为。

知识点拆解:

  1. B+ 树中的联合索引排列规则:联合索引 (a,b,c) 在 B+ 树中先按 a 排序,a 相同按 b 排序,b 相同按 c 排序,与字典序排序一致。WHERE 条件必须从最左侧开始,跳过中间字段则后续字段失去有序性,无法利用索引范围扫描。
  2. 范围查询截断效应:WHERE a=1 AND b>2 AND c=3 中,b 用范围条件后,不同 b 值下的 c 排序各自独立,c 无法利用索引,只能回表后过滤。
  3. MySQL 8.0 索引跳跃扫描:当最左字段区分度极低时,MySQL 8.0 可逐个遍历最左字段值,在每个子树内利用后续字段。不是万能解,需满足低基数、无索引下推等条件。

第二部分:考察方向与延伸递进

考察方向:

延伸递进面试题:

  1. 联合索引 (a,b,c),WHERE b=2 AND c=3 能走索引吗?
  1. 联合索引 (a,b,c),WHERE a=1 AND c=3 能走索引吗?
  1. 联合索引字段顺序怎么设计?

第三部分:面试者参考回答(口语化)

面试官您好,最左前缀匹配的本质是 B+ 树中联合索引的排序规则。

联合索引比如 (a,b,c),在 B+ 树里先用 a 排序,a 相同再用 b 排序,b 也相同再用 c 排序,和字典排序一个道理。所以查询条件必须从最左边开始匹配。WHERE a=1 能走索引,WHERE a=1 AND b=2 也能走,但跳过 a 直接查 WHERE b=2 就不行了,因为所有 b 值分散在不同 a 值下面,无法利用有序性。

还有一个重要场景,WHERE a=1 AND b>2 AND c=3。b 用了范围查询,不同 b 值下面的 c 排序是独立的,c 无法继续利用索引做范围扫描,只能回表后过滤。

MySQL 8.0 有个例外叫索引跳跃扫描,最左字段区分度很低时,MySQL 可以逐个遍历最左字段的值,在每个子树内利用后续字段,但这不是通用方案。

总结来说,最左前缀匹配不是 MySQL 人为规定的规则,而是 B+ 树的排序结构决定的物理事实。

https://chat.deepseek.com/share/f59k51fog1moopg9u0