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 联合索引优化查询性能的关键。
热门推荐
猫咪不能吃巧克力?真相揭秘!
猫咪饮食中的三大营养陷阱揭秘!
老白茶过期吗 白茶过期5年了但没开封
得了糖尿病,总是感觉乏力?十佳优质蛋白质食物,多吃点
债券通投资需求上涨,香港金管局再推新规扩容交易渠道
《熊猫奇遇记》:生态中国,探索与纪实的叙事交响
南宁至德天瀑布巴马越南旅游攻略
通过一个跨境并购案例,看如何在国际业务中锤炼一流投行
境外投资方式详解:如何选择合适的ODI、FDI、QDII、QDLP与QDIE?
境外投资方式详解:如何选择合适的ODI、FDI、QDII、QDLP与QDIE?
日本也有“湖南”?揭秘滋贺县湖南市的前世今生
天台大师:湖湘文化的日本使者
湖南省与日本的文化交流:千年茶香与墨韵的传承
羽毛球拍3u、4u、5u全面对比:重量、性能与适用人群解析
漫步西安中轴线 邂逅传统与现代的融合
三年成势 西安高新区丝路科学城打造高能级现代化新城
【数说西安75年】科技创新引领 促高质量发展
国联调查团与九一八事变:一场未竟的国际法理较量
苏格拉底教你如何不被生活“套路”
健康饮食+规律运动,助你轻松实现人生目标!
国动新作《星卡梦少女》角色造型大揭秘!
如何面对事业上的低谷
高效暑假作业计划:解锁孩子自律习惯的秘籍
春节档票房大战:《射雕》VS《哪吒》,你站谁?
《封神》《射雕》双雄对决:历史人物再现银幕
冬季园林枝干病害防治攻略:枝干腐烂病、溃疡病、枝枯病全解析
冬季园林修剪全攻略:从时机到技巧,打造健康树冠
婚庆主持必备:掌握话筒小技巧
用心理学打造完美婚礼:从新娘自信到氛围营造
深圳大梅沙海滨公园游玩时间及攻略