MST

星途 面试题库

面试题:MySQL中联合索引的最左匹配原则是什么,如何在查询中应用该原则以充分利用联合索引?

请阐述MySQL联合索引最左匹配原则的原理,并举例说明在SQL查询语句中,怎样的查询条件排列能满足该原则从而高效利用联合索引,假设存在一个联合索引(col1, col2, col3)。
26.9万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

最左匹配原则原理

MySQL联合索引的最左匹配原则是指,在使用联合索引时,查询条件从索引的最左边开始依次匹配,只有当左边的列被使用到了,右边的列才有可能被用到。这是因为MySQL的索引结构是B+树,联合索引的B+树节点存储的是索引列的组合值,并且按照索引定义的顺序排序。如果查询条件不满足从最左边开始匹配,索引就无法按照顺序快速定位数据,只能进行全表扫描。

满足最左匹配原则的SQL查询示例

  1. 完全匹配 假设存在联合索引(col1, col2, col3),如下查询能高效利用该联合索引:
SELECT * FROM your_table 
WHERE col1 = 'value1' AND col2 = 'value2' AND col3 = 'value3';
  1. 部分匹配 查询只使用前两列,也能利用联合索引:
SELECT * FROM your_table 
WHERE col1 = 'value1' AND col2 = 'value2';
  1. 最左前缀匹配 只使用第一列同样可以利用联合索引:
SELECT * FROM your_table 
WHERE col1 = 'value1';

不满足最左匹配原则的SQL查询示例

  1. 跳过最左列 如下查询无法利用联合索引,因为跳过了col1:
SELECT * FROM your_table 
WHERE col2 = 'value2' AND col3 = 'value3';
  1. 无序匹配 查询条件顺序与索引顺序不一致且未满足最左匹配,也无法利用联合索引:
SELECT * FROM your_table 
WHERE col2 = 'value2' AND col1 = 'value1';