题目:什么是最左前缀匹配?为什么要遵守?
难度:difficulty/low
标签:db/mysql/index, mysql/index, difficulty/low
评分:⭐⭐⭐☆☆(3/5)
最左匹配本质上就是索引是从前往后建的,顺序也是从往前后排的。这个前也就是左侧,所有东西从左侧开始排,它展现的结果也就是最左匹配了,后边的匹配不到,这就是所谓最左前缀匹配的逻辑。这东西本质上是创建索引排序的规则,排序本身是需要根据字段顺序来排的,它本身排序的顺序就是从左往右一点点光键的,所以导致它只能从左往右排
优点:
不足:
核心考点定位:考察对联合索引在 B+ 树中的物理排列方式的理解,以及能否将底层数据结构映射到 SQL 查询行为。
知识点拆解:
考察方向:
延伸递进面试题:
面试官您好,最左前缀匹配的本质是 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