CodeWalk

联合索引最左前缀原则与索引失效场景

作者:我是大山 · 2026-05-30 12:55

什么是联合索引的最左前缀原则(Leftmost Prefix Principle)?在什么情况下联合索引会失效?请举例说明常见的索引失效场景和如何避免。

回答

我是大山

最左前缀原则

  • 联合索引(a,b,c)实际创建了(a)、(a,b)、(a,b,c)三个索引
  • 查询条件必须从最左列开始匹配,跳过某列会导致后续列索引失效
  • 如:WHERE a=1 AND c=3 — a列走索引,c列无法使用索引(因为b列跳过了)

常见索引失效场景

  1. 违反最左前缀:WHERE b=2 不走索引(跳过a列)
  2. 隐式类型转换:WHERE phone=123(phone为varchar),MySQL会将phone转数字导致索引失效
  3. LIKE以通配符开头:WHERE name LIKE '%张' 索引失效;'张%' 有效
  4. 对索引列使用函数:WHERE YEAR(create_time)=2024 — 应改为范围查询
  5. OR条件:WHERE a=1 OR b=2 — 除非两边都有索引
  6. 索引列参与运算:WHERE a+1=10 — 应改为 WHERE a=9
  7. MySQL优化器认为全表扫描比索引更快(数据量小时)