问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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 = 1b > 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. 优化查询以符合最左前缀匹配

  1. 调整查询条件顺序
  2. 避免跳列
  • 联合索引的中间列不能跳过,否则后续列的索引无法使用。
  1. 分解查询
  • 将无法利用索引的查询分解成可以利用索引的多次查询。

5. 总结

  • 原则:联合索引必须从最左列开始匹配,且列之间连续。
  • 范围条件的影响:范围条件会阻断后续列的索引使用。
  • 优化建议:根据最左前缀匹配原则设计查询条件,确保索引能够高效利用。

理解和遵循最左前缀匹配原则,是使用 MySQL 联合索引优化查询性能的关键。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号