MySQL 索引的最左前缀匹配原则是什么?
MySQL 索引的最左前缀匹配原则
最左前缀匹配原则是 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;
a LIKE '1%'可以使用索引。
SELECT * FROM users WHERE a LIKE '%1' AND b = 2;
a LIKE '%1'无法使用索引。
4. 优化查询以符合最左前缀匹配
调整查询条件顺序:
- 确保条件从联合索引的最左列开始,并连续覆盖。
避免跳列:
- 联合索引的中间列不能跳过,否则后续列的索引无法使用。
分解查询:
- 将无法利用索引的查询分解成可以利用索引的多次查询。
5. 总结
- 原则:联合索引必须从最左列开始匹配,且列之间连续。
- 范围条件的影响:范围条件会阻断后续列的索引使用。
- 优化建议:根据最左前缀匹配原则设计查询条件,确保索引能够高效利用。
理解和遵循最左前缀匹配原则,是使用 MySQL 联合索引优化查询性能的关键。
MySQL 索引的最左前缀匹配原则是什么?的更多相关文章
- 关于MySQL索引的最左前缀匹配原则原理说明说明
假设有2个这样的SQL SELECT * FROM table WHERE a = 1 AND c = 3; // c不走索引 SELECT * FROM table WHERE a = 1 AND ...
- 我说MySQL联合索引遵循最左前缀匹配原则,面试官让我回去等通知
面试官: 我看你的简历上写着精通MySQL,问你个简单的问题,MySQL联合索引有什么特性? 心想,这还不简单,这不是问到我手心里了吗? 听我给你背一遍八股文! 我: MySQL联合索引遵循最左前缀匹 ...
- mysql 最左前缀匹配原则
1.在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,示例:对列col1.列col2和列col3建一个联合索引 KEY index_col1_co ...
- MySQL索引 索引分类 最左前缀原则 覆盖索引 索引下推 联合索引顺序
MySQL索引 索引分类 最左前缀原则 覆盖索引 索引下推 联合索引顺序 What's Index ? 索引就是帮助RDBMS高效获取数据的数据结构. 索引可以让我们避免一行一行进行全表扫描.它的 ...
- MySQL 的索引和最左前缀原则
这两天看<构建高性能Web站点>这本书,感觉写的真是不错,很多实际项目中会碰到的问题都有所提及,今天看到一个最左前缀原则,以前也听说过,不过一直没搞明白,今天查了下. 通过实例理解单列索引 ...
- mysql多列索引和最左前缀
数据库的索引可以加快查询速度,原因是索引使用特定的数据结构(B-Tree)对特定的列额外组织存放,加快存储引擎(索引是存储引擎实现)查找记录的速度.索引优化是数据库优化的最重要手段. 如果查询语句使用 ...
- mysql索引之一:索引基础(B-Tree索引、哈希索引、聚簇索引、全文(Full-text)索引区别)(唯一索引、最左前缀索引、前缀索引、多列索引)
没有索引时mysql是如何查询到数据的 索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储10 ...
- mysql索引之四:复合索引之最左前缀原理,索引选择性,索引优化策略之前缀索引
高效使用索引的首要条件是知道什么样的查询会使用到索引,这个问题和B+Tree中的“最左前缀原理”有关,下面通过例子说明最左前缀原理. 一.最左前缀索引 这里先说一下联合索引的概念.MySQL中的索引可 ...
- Mysql联合索引的最左前缀原则以及b+tree
软件版本mysql5.7 根据官网的文档 https://dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html 查询条件要符合最左原 ...
- MySQL的索引类型和左前缀索引
1.索引类型: 1.1B-tree索引: 注:名叫btree索引,大的方面看,都用的是平衡树,但具体的实现上,各引擎稍有不同,比如,严格的说,NDB引擎,使用的是T-tree,但是在MyISAM,In ...
随机推荐
- Java03-程序流程控制
Java程序流程控制 [ 任务列表 ] 1.选择结构(if.switch) 2.循环结构(for.while.do-while) 3.跳转关键字(break.continue.return) 4.其他 ...
- 点赞!TeleDB入选2024大数据星河案例!
12月18日,由中国信息通信研究院和中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)共同组织的2024大数据"星河"案例入围名单正式发布,天翼云科技有限公司携手中 ...
- Python 数
Python 数 在Python中,数字是编程中不可或缺的一部分.Python支持多种类型的数字,包括整数.浮点数等.下面我们将详细介绍这些数字类型以及它们之间的运算和格式化. 整数 整数是Pytho ...
- 什么是Kappa架构?
一.简介 相当于在Lambda架构上去掉了批处理层(Batch Layer),只留下单独的流处理层(Speed Layer).通过消息队列的数据保留功能,来实现上游重放(回溯)能力. 当流任务发生代码 ...
- List<Map<String, Object>> 排序
一.代码 public class Test { public static void main(String[] args) { Map<String, Object> map = ne ...
- AD22 PCB导出Gerber文件详细步骤
PCB绘制好,检查完成后,就可以把文件交给PCB工厂生产了,一般有两种方式: 第一种最简单就是直接将PCB文件压缩打包,发给工厂. 第二种生成Gerber等相关资料,再压缩打包,发给工厂. 这里以AD ...
- Trae初体验
前情 自从AI IDE面世以来,网络上到处流传程序员要失业了,小白也能轻松完成程序开发了,某某0基础靠AI上架了苹果应用,平时工作也有偶尔用用AI工具的我,都觉得这些都是标题党文章不予理会的,直到看到 ...
- 百万架构师第四十四课:Nginx:Nginx 的扩展-OpenRestry|JavaGuide
百万架构师系列文章阅读体验感更佳 原文链接:https://javaguide.net 公众号:不止极客 Nginx 的扩展-OpenRestry 课程目标 Nginx 进程模型简介 Nginx 的高 ...
- web站点常见漏洞及解决方法
1.PHP Web表单哈希冲突拒绝服务漏洞 漏洞分析:PHP 5.3.9之前版本在计算表单参数哈希值的实现上存在拒绝服务漏洞,该漏洞源于未提前限制哈希冲突.攻击者可利用该漏洞通过发送小量的特制webf ...
- 百万架构师第四十六课:并发编程的原理(一)|JavaGuide
百万架构师系列文章阅读体验感更佳 原文链接:https://javaguide.net 并发编程的原理 课程目标 JMM 内存模型 JMM 如何解决原子性.可见性.有序性的问题 Synchronize ...