直接回答:最左前缀原则指联合索引 (a, b, c) 的 B+ 树按从左到右的列顺序排序,查询条件必须从最左列开始连续匹配,索引才能用于定位。它能支持 a、(a,b)、(a,b,c) 三种前缀查询;跳过 a 直接用 b,或 a 用了范围查询后,右边的列就只能过滤不能用于定位。

展开解析:本质原因是排序规则:索引先按 a 排,a 相同才按 b 排——跳过 a 后 b 在全局无序,无法二分定位。要点:

  • 等值列顺序无关:WHERE b=? AND a=? 优化器会重排,只要最左列出现在条件里即可。
  • 范围查询(>、BETWEEN、LIKE '%x' 前缀之外的形式)会中断后续列的索引定位,但 MySQL 5.6+ 的索引下推可在引擎层继续用索引列过滤。
  • 建索引时把等值列放前、范围列放后;高选择性列优先的说法要结合查询模式,别教条。
-- 索引 (a,b,c)
WHERE a=1 AND b=2        -- 用到 a,b
WHERE b=2                -- 用不上(跳过 a)
WHERE a=1 AND b>2 AND c=3 -- a 定位,b 范围,c 只能过滤

追问方向:索引下推、跳跃扫描(MySQL 8 的 skip scan)。