美文网首页程序员
Mysql - 组合索引的B+树存储结构(最左前缀原理)

Mysql - 组合索引的B+树存储结构(最左前缀原理)

作者: 夹胡碰 | 来源:发表于2021-01-06 23:52 被阅读0次

MysqlB+树索引在单列索引上比较好理解,结构如下:

组合索引B+树存储结构是什么样的呢,为什么会有最左前缀原理,看了很多帖子找到了答案

  • 数据表


  • B+树结构
    b c d设置组合索引

对于联合索引来说只不过比单值索引多了几列,而这些索引列全都出现在索引树上。对于联合索引,存储引擎会首先根据第一个索引列排序,如上图我们可以单看第一个索引列,如,1 1 5 12 13…它是单调递增的;如果第一列相等则再根据第二列排序,依次类推就构成了上图的索引树,上图中的1 1 4 ,1 1 5以及13 12 4, 13 16 1, 13 16 5就可以说明这种情况。

  • 联合索引的查找方式

当我们的SQL语言可以应用到索引的时候,比如 select * from T1 where b = 12 and c = 14 and d = 3; 也就是T1表中a列为4的这条记录。存储引擎首先从根节点(一般常驻内存)开始查找,第一个索引的第一个索引列为1,12大于1,第二个索引的第一个索引列为56,12小于56,于是从这俩索引的中间读到下一个节点的磁盘文件地址,从磁盘上Load这个节点,通常伴随一次磁盘IO,然后在内存里去查找。当Load叶子节点的第二个节点时又是一次磁盘IO,比较第一个元素,b=12,c=14,d=3完全符合,于是找到该索引下的data元素即ID值,再从主键索引树上找到最终数据。

  • 最左前缀匹配原则

之所以会有最左前缀匹配原则和联合索引的索引构建方式及存储结构是有关系的。
首先我们创建的idx_t1_bcd(b,c,d)索引,相当于创建了(b)、(b、c)(b、c、d)三个索引,看完下面你就知道为什么相当于创建了三个索引。
我们看,联合索引是首先使用多列索引的第一列构建的索引树,用上面idx_t1_bcd(b,c,d)的例子就是优先使用b列构建,当b列值相等时再以c列排序,若c列的值也相等则以d列排序。我们可以取出索引树的叶子节点看一下。

索引的第一列也就是b列可以说是从左到右单调递增的,但我们看c列和d列并没有这个特性,它们只能在b列值相等的情况下这个小范围内递增,如第一叶子节点的第1、2个元素和第二个叶子节点的后三个元素。
由于联合索引是上述那样的索引构建方式及存储结构,所以联合索引只能从多列索引的第一列开始查找。所以如果你的查找条件不包含b列如(c,d)、(c)、(d)是无法应用缓存的,以及跨列也是无法完全用到索引如(b,d),只会用到b列索引。

参考

  1. 联合索引在B+Tree上的存储结构及数据查找方式

相关文章

  • Mysql - 组合索引的B+树存储结构(最左前缀原理)

    Mysql的B+树索引在单列索引上比较好理解,结构如下: 那组合索引的B+树存储结构是什么样的呢,为什么会有最左前...

  • 数据库(mysql)知识

    聚簇索引,覆盖索引 常见优化方式 B+树存储的结构 最左原则 存储引擎InnoDb和MyIsam区别 https:...

  • 索引最左前缀匹配

    最左前缀原理 联合索引中查找遵循最左前缀原理:例如,建立如下(a,b,c,d)的联合索引,索引结构会按照a,b,c...

  • 11.MySQL组合索引的有序性

    组合索引的有序性和最左前缀原理【强制】理解组合索引最左前缀原则,避免重复建设索引,如果建立了(a,b,c),相当于...

  • 索引

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

  • MYSQL的索引与B+Tree

    MySQL 索引与 B+ 树 B+ 树 MySQL Innodb 存储引擎是使用 B+ 树来组织索引的。在介绍 B...

  • 倒排索引与数据库索引

    数据库索引 mysql索引以B+树作为存储结构,B+树的主要特点是,非叶子节点不存储数据,数据只存储在叶子节点上,...

  • MySQL

    索引 InnoDB MySQL5.6版本之后默认引擎是innoDB,以B+树作为索引的数据存储结构。B+数是以B树...

  • 字节跳动后端面经(11)

    MySQL索引数据结构、索引分类、联合索引、MySQL悲观锁和乐观锁怎么实现的 B+树、AVL、红黑树的原理 TC...

  • MySQL最左匹配原则,道儿上兄弟都得知道的原则

    自MySQL5.5版本起,主流的索引结构转为B+树。B+树的节点存储索引顺序是从左向右存储,在检索匹配的时候也要满...

网友评论

    本文标题:Mysql - 组合索引的B+树存储结构(最左前缀原理)

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