美文网首页MySQL
MySQL 索引——联合索引的最左匹配原则

MySQL 索引——联合索引的最左匹配原则

作者: lframe | 来源:发表于2020-07-01 08:31 被阅读0次

为什么要了解联合索引的最左匹配原则

日常开发中,检索数据的条件通常多于一个;为了提升数据的检索效率,我们通常会建立多个列的联合索引,但是由于不熟悉 MySQL 的最左匹配原则,即使建立了联合索引,但在执行相应的查询操作时 MySQL 却无法用到索引,最终导致新增的索引无法提升 SQL 的检索效率,并且也增加了表维护的开销.

举一个简单的例子

我们在 ab两列上建立了联合索引(a,b).

  1. 通过where b = 3检索数据时,MySQL 是无法使用联合索引的
  2. 通过 a > 1 and b > 2 检索数据,MySQL 仍然无法使用联合索引
    所以了解 MySQL 的最左匹配原则非常有必要!

什么是最左匹配原则

1. MySQL 会一直向右匹配直到遇到范围查询【>、<、between、like】就停止匹配

我们仍然通过一个例子分析

比如建立 (a,b,c,d)的顺序索引,检索条件为 a = 1 and b = 2 and c > 3 and d = 4,此时只有通过a,b检索数据能够用到索引。

2.其中in=可以乱序
比如建立联合索引 (a,b),查询语句为where b = 1 and a = 3,此时仍然可以用到索引,因为 MySQL 的查询优化器会帮你优化成索引可以识别的形式

那上面的建立 (a,b,c,d)的顺序索引,检索条件为 a = 1 and b = 2 and c > 3 and d = 4,MySQL 的查询优化器无法优化呢,因为需要遵循联合索引的最左匹配原则

联合索引的最左匹配原则的成因

MySQL创建复合索引的规则首先会对复合索引的最左边的字段的数据进行排序,在第一个字段排序的基础上,再对第二个索引字段进行排序,其实类似实现了order by 字段1,再 order by 字段2 这样一种排序规则,所以呢,第一个字段是绝对有序的,而第二个字段就是无序的了,因此通常情况下, 直接使用第二个字段进行条件判断是用不到索引的,这就是MySQL为什么要强调联合索引最左匹配原则的原因

总结

索引并不是建立的越多越好
1. 数据量小的表不需要建立索引,建立会增加额外的索引开销。
2. 数据变更需要维护索引,因此更多的索引意味着更多的维护成本。
3. 更多的索引意味着也需要更多的空间。

相关文章

  • 索引

    这道题目考察的知识点是MySQL组合索引(复合索引)的最左优先原则。 最左前缀匹配原则 在mysql建立联合索引时...

  • 联合索引

    联合索引的创建原则 使用次数较为频繁的放在最左端。(此时甚至可为其单独建立索引) 联合索引存在“最左原则”。 最左...

  • mysql索引分类

    常见的索引类型 聚簇索引 非聚簇索引 最左匹配原则 B+树索引 普通索引 唯一索引 主键索引 联合索引 全文索引 ...

  • 索引优化笔记!

    mysql最左匹配原则如果sql语句中用到了组合索引中的最左边的索引,那么就可以利用这个组合索引去进行匹配 mys...

  • MySQL 索引——联合索引的最左匹配原则

    为什么要了解联合索引的最左匹配原则 日常开发中,检索数据的条件通常多于一个;为了提升数据的检索效率,我们通常会建立...

  • innodb联合索引

    1.联合索引遵从最左匹配原则,但是mysql对于条件字段会优化顺序 用到index(class, age)sele...

  • Mysql联合索引最左匹配原则

    [toc] 为什么使用联合索引 以联合索引(a,b,c)为例 建立这样的索引相当于建立了索引a、ab、abc三个索...

  • mysql索引

    表结构 联合索引 以下3种情况索引全部生效:说明只要有最左匹配列,索引都能生效,且不受顺序影响,mysql自动优化...

  • Mysql —— 联合索引的最左匹配原则

    一、前言 上一篇文章介绍了 Innodb 中页与索引相关的知识点。本文接上文,说一下在联合索引中最左匹配原则是如何...

  • Mysql 联合索引最左原则

    在最左匹配原则中,有如下说明: 1、最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>...

网友评论

    本文标题:MySQL 索引——联合索引的最左匹配原则

    本文链接:https://www.haomeiwen.com/subject/pwgqqktx.html