面试题答案
一键面试- 最左匹配原则在联合索引
index_emp (id, name, department)
中的表现:- 联合索引在查询时,只有当查询条件从索引的最左边开始连续匹配时,才能充分利用索引。也就是说,查询条件必须先使用
id
字段,然后可以接着使用name
字段,再接着可以使用department
字段。如果跳过某个字段,索引的部分功能可能无法发挥。 - 例如,索引结构类似一颗B - Tree,先根据
id
进行排序,id
相同的情况下再按name
排序,name
相同的情况下再按department
排序。所以查询时也需要从id
开始匹配。
- 联合索引在查询时,只有当查询条件从索引的最左边开始连续匹配时,才能充分利用索引。也就是说,查询条件必须先使用
- 基于该原则优化查询语句的示例:
- 充分利用索引的查询:
-- 先使用id字段,能充分利用索引 SELECT * FROM employees WHERE id = 1; -- 先使用id字段,接着使用name字段,能充分利用索引 SELECT * FROM employees WHERE id = 1 AND name = 'John'; -- 先使用id字段,接着使用name字段,再使用department字段,能充分利用索引 SELECT * FROM employees WHERE id = 1 AND name = 'John' AND department = 'HR';
- 未充分利用索引的查询(部分场景下索引无法完全发挥作用):
-- 跳过了id字段,索引无法充分利用 SELECT * FROM employees WHERE name = 'John'; -- 跳过了id和name字段,索引无法充分利用 SELECT * FROM employees WHERE department = 'HR'; -- 中间跳过字段,索引无法充分利用 SELECT * FROM employees WHERE id = 1 AND department = 'HR';
- 充分利用索引的查询:
通过确保查询条件遵循最左匹配原则,按照 id
、name
、department
的顺序依次出现在 WHERE
子句中,可以最大程度利用该联合索引来提升查询性能。