MySQL 索引的最左前缀匹配原则是什么?
创作时间:
作者:
@小白创作中心
MySQL 索引的最左前缀匹配原则是什么?
引用
1
来源
1.
https://www.cnblogs.com/eiffelzero/p/18607363
MySQL的最左前缀匹配原则是使用联合索引时的一个重要优化规则。它决定了在查询条件中,只有符合索引最左侧字段开始的连续前缀部分时,索引才能被有效利用。本文将详细解释这一原则,并通过具体示例说明其在实际应用中的重要性。
1. 最左前缀匹配的含义
- 联合索引:一个索引包含多个列,如
CREATE INDEX idx_col ON table (a, b, c);。 - 最左前缀:指联合索引中从最左侧开始连续的一个或多个列。
只有查询条件使用了从最左侧开始的列,或者符合从最左侧列开始的部分连续列时,索引才会生效。
2. 示例分析
(1)创建联合索引
假设有如下表结构:
CREATE TABLE users (
id INT PRIMARY KEY,
a INT,
b INT,
c INT,
KEY idx_abc (a, b, c)
);
(2)不同查询条件的索引使用情况
查询条件 | 最左前缀匹配 | 是否使用索引 |
|---|---|---|
WHERE a = 1 | 匹配 a | 是 |
WHERE a = 1 AND b = 2 | 匹配 a, b | 是 |
WHERE a = 1 AND b = 2 AND c = 3 | 匹配 a, b, c | 是 |
WHERE b = 2 | 不匹配(未从最左列开始) | 否 |
WHERE c = 3 | 不匹配(未从最左列开始) | 否 |
WHERE b = 2 AND c = 3 | 不匹配(跳过了 a) | 否 |
3. 索引前缀的灵活性
(1)范围查询对索引的影响
- 范围条件(如
<,>,BETWEEN,LIKE等)会中断最左前缀匹配后续列的索引使用。
示例:
SELECT * FROM users WHERE a = 1 AND b > 2 AND c = 3;
- 分析:
a = 1和b > 2满足索引a, b的最左前缀匹配。- 但由于
b > 2是范围查询,c = 3无法继续利用索引。
(2)LIKE 模式匹配
- 如果
LIKE以通配符(如%)开头,会破坏索引匹配。
示例:
SELECT * FROM users WHERE a LIKE '1%' AND b = 2;
SELECT * FROM users WHERE a LIKE '%1' AND b = 2;
4. 优化查询以符合最左前缀匹配
- 调整查询条件顺序:
- 避免跳列:
- 联合索引的中间列不能跳过,否则后续列的索引无法使用。
- 分解查询:
- 将无法利用索引的查询分解成可以利用索引的多次查询。
5. 总结
- 原则:联合索引必须从最左列开始匹配,且列之间连续。
- 范围条件的影响:范围条件会阻断后续列的索引使用。
- 优化建议:根据最左前缀匹配原则设计查询条件,确保索引能够高效利用。
理解和遵循最左前缀匹配原则,是使用 MySQL 联合索引优化查询性能的关键。
热门推荐
音响的效果如何?怎样提升音响的音质?
普通住宅土地增值税计算方法有哪些
涉及珠江、长城,这些跨省域公益损害问题治理有了新进展
职称评审流程详细步骤-手把手教你避开那些年踩过的坑
儿童成长中疼爱的正确方式与误区分析
对他人侮辱受到怎么样惩罚
员工补缴社保新规定:企业应遵守,否则将面临罚款等后果
折弯机的分类、结构及工作原理
观察丨《难哄》《滤镜》《爱你》轮番上阵,2025年现偶赛道能否逆风翻盘?
网站设计中的色彩理论应用:选择正确的颜色搭配
维特根斯坦说,因果关系是这个世界上最大的迷信,如何理解?
马蹄削皮后变黄怎么办 削皮的马蹄可以冷冻保存吗
带你读懂真实的《西游记》,吴承恩:其实我写的就是“黑神话”
燃烧型总有机碳TOC分析仪的原理及分析步骤
南京本地人找对象,婚介所和相亲角哪个更有效?
土地增值税是什么?如何计算?企业如何应对?
中核集团声明:无任何关系!
如何预防乙酸甲酯中毒?
员工吐槽公司是“随时要跑路的垃圾”遭起诉?法院:应适当容忍合理范围内负面评价
秦皇岛山海关旅游攻略,穿越历史的长廊,探寻天下第一关
货车如何保养?常见货车保养项目全攻略
“鸡胸”与“漏斗胸”:胸廓畸形的奥秘与解救之道
马华华人党参政历程:巫华联盟联合执政的行程,族群矛盾的固定化
寄居蟹火了!你考虑养一只吗?
以案释法:用人单位为员工补缴社保,产生的滞纳金到底该谁承担?
“朕”字的演变:从人人可用到皇帝专用
中核战略规划研究总院成功举办全球核燃料循环创新发展研讨会
“孤家寡人”的由来:皇帝为何自称“寡人”?
推理模型 vs. 其他AI模型
睡眠催眠:改善睡眠又啟動您的動力,邁向成功