在 MySQL 中,联合索引的最左前缀匹配规则具体是怎样工作的?
考察说明
考查对联合索引最左前缀匹配原则的理解及应用能力。
回答思路
- 【回答框架 1】最左前缀匹配原则是指联合索引 (a,b,c) 在查询条件中必须从最左列 a 开始连续匹配,跳过或缺失左侧列则索引失效。例如条件只包含 b 和 c 时无法使用该索引。
- 【回答框架 2】该原则基于 B+ 树索引结构,联合索引按列顺序排序,先按 a 排序,a 相同再按 b 排序,因此查询必须遵循这一排序前缀才能利用索引的有序性进行快速定位。
- 【回答框架 3】在实战中,应遵循两个要点:一是将等值查询的列放在最前面,二是将范围查询(如 >、<、between)的列放在最后,因为范围条件之后的列无法继续使用索引进行过滤。
- 【回答框架 4】对于跳过列的情况,如条件为 (a,c),MySQL 只能使用 a 列进行索引查找,c 列需要在回表后过滤,这会导致额外的随机 I/O。优化时可通过调整查询条件或额外创建索引来覆盖缺失列。
- 【关键点 1】联合索引必须从最左列开始连续匹配,缺失左侧列则索引失效。
- 【关键点 2】范围查询之后的列无法继续利用索引进行过滤。
- 【关键点 3】索引列顺序应优先考虑等值查询列,范围查询列靠后。
- 【关键点 4】最左前缀原则源于 B+ 树索引的排序结构。
- 【易错点 1】不要混淆最左前缀与最左列:最左前缀强调连续匹配,而最左列仅要求第一个列被使用。
- 【易错点 2】范围查询列放在中间会导致后续列索引失效,需谨慎设计列顺序。
- 【易错点 3】联合索引 (a,b) 无法覆盖查询条件只包含 b 的场景,需额外考虑索引选择。