MySQL索引最左匹配原则是面试必考的高频考点,深入理解可避免80%索引失效问题。本文深度解析联合索引(a,b,c)的底层B+树排序机制,揭示为何查询必须从最左字段开始才能命中索引。通过真实SQL案例对比索引生效与失效场景,特别讲解范围查询对右侧字段的影响。MySQL5.6的索引下推优化(ICP)如何提升LIKE查询效率?最后给出4条索引设计黄金法则:高频字段前置、避免冗余、范围字段靠右、控制长度。掌握这些技巧可大幅提升数据库查询性能,轻松应对技术面试。
2025年Java面试宝典(提取码:9b3g)整理了MySQL高频面试真题,建议配合本文阅读效果更佳。
MySQL索引最左匹配原则是面试中必考的高频知识点,特别在涉及联合索引优化时,理解该原则能帮助我们避免80%以上的索引失效问题。本文将通过真实面试场景还原,带你掌握最左匹配原则的本质。
B+树索引结构决定了联合索引的存储方式:索引按定义字段的从左到右顺序构建排序。例如定义(a,b,c)
联合索引时:
这种结构特性导致查询必须从最左侧字段开始使用,就像查字典必须知道首字母才能快速定位一样。缺少左侧字段时,索引树无法确定扫描起点,就会退化成全表扫描。
假设存在(name,age,position)
联合索引:
-- 有效查询(走索引)
SELECT * FROM employee WHERE name='张三'
SELECT * FROM employee WHERE name='李四' AND age=30
SELECT * FROM employee WHERE name='王五' AND age=25 AND position='工程师'
-- 有效范围查询
SELECT * FROM employee WHERE name>'陈' AND name<'杨'
SELECT * FROM employee WHERE name='赵六' AND age BETWEEN 25 AND 30
这三个案例都满足前缀连续性原则,特别是范围查询时要特别注意:当遇到范围查询(>、<、BETWEEN)后,右侧的索引列将失效。
-- 失效查询(全表扫描)
SELECT * FROM employee WHERE age=30
SELECT * FROM employee WHERE age=25 AND position='架构师'
SELECT * FROM employee WHERE name='张三' AND position='经理'
当跳过左侧字段直接使用中间或右侧字段时,索引无法发挥作用。特别注意第三个查询虽然使用了name字段,但跳过了age字段直接使用position,导致只能使用name字段的索引,position字段无法参与索引查询。
MySQL5.6引入的索引下推(ICP)优化了部分场景:
SELECT * FROM employee
WHERE name LIKE '张%'
AND age=30
AND position='工程师'
在5.6之前,这个查询只能使用name字段索引,5.6之后存储引擎会先过滤age=30的记录,再将结果交给Server层过滤position。虽然索引字段未完全匹配,但通过ICP减少了回表次数。
(a,b)
索引时,单独创建a字段索引是多余的如果大家需要购买面试鸭会员,可以通过面试鸭返利网找到我,返利25元。本站持续更新数据库优化实战技巧,助你轻松应对技术面试。
扫码联系我返利
(当前返利8元,金额随官方实际价格波动,最好提前咨询)
面试鸭小程序码
美团大额优惠券,给自己加个鸡腿吧!