mysql复合索引btree结构_mysql - index 索引 之 索引结构(B+tree)

本文介绍了MySQL中的索引类型,重点关注B+Tree索引的结构和特性。B+Tree是一种多路平衡搜索树,其在查询效率上优于二叉树。在MySQL中,B+Tree的叶子节点存储所有key信息,非叶子节点作为key的索引。通过B+Tree索引,MySQL能提供更稳定的查询性能。文章还提及了带有顺序指针的优化版B+Tree,提升区间访问性能。
摘要由CSDN通过智能技术生成

概述:

索引是在mysql的存储引擎层中实现的,不是在服务层。

故,每种存储引擎的索引都不一定完全相同,也不是所有的存储引擎都支持所有的索引类型。

mysql目前,提供了一下4中索引:

BTREE索引: 最常见的索引类型,大部分索引都支持B树索引;

HASH索引:   只有Memory引擎支持,使用场景简单;

R-tree索引:   空间索引是MyISAM引擎的一个特殊类型,主要用于地理空间数据类型,通常使用较少;

Full-text索引:全文索引

我们平常所说的索引,若没有特别指明,一般都指B+树结构组织的索引。其中:聚集索引、复合索引、前缀索引、唯一索引默认都是使用B+tree索引,统称为索引。

59ef3c6c765beab7b11470fc60612ce1.png

BTREE结构:

Btree 又叫做 多路平衡搜索树,一颗M叉的Btree特性如下:

树中每个节点,最多包含m个孩子(子节点),二叉树最多包含2个孩子;

除根节点与叶子节点外,每个节点至少有 ceil(m/2) 个孩子,ceil:向上取整;

若根节点不是叶子节点,则至少有2个孩子;

所有的叶子节点,都在同一层;

每个非叶子节点,由n个key 与 n+1个指针组成,其中:ceil(m/2) -1 <= n <= m-1

以5叉Btree为例,key的数量:公式推导ceil(m/2) -1 <= n <= m-1,故 2 <= n <= 4。当n>4时,中间节点分裂到父节点,两边节点分裂。

插入  C N G A H E K Q M F W L T Z D P R X Y S 数据为例:

演变过程如下:

插入前4个字母:C N G A 244310ed4cdc01e044947d9833512aeb.png

插入H,n>4,中间元素G字母向上分裂到新的节点e4645bc1e3b6255a4b61ec01af693447.png

插入  E K Q 不需要分裂:d56c1646d02a6dfa11798bb4175b5753.png

插入M,中间元素M字母向上分裂到父节点Ga22dc552745c5ec52826c867531a21d5.png

插入F W L T 不需要分裂:18e87c0feaeb8274c2f4778be8e06cfc.png

插入Z,中间元素T向上分裂到父节点中090e8fa279d145a854222db94ff6a937.png

插入D ,中间元素D向上分裂到父节点中,然后插入 P R X Y不需要分裂:96de06860c0b0ca1d6be374dc3443482.png

最后插入S,N P Q R节点n>5,中间节点Q向上分裂,但分裂后父节点DGMT的n>5,中间节点M向上分裂:d14dd1d9b045db3d0c471bd9431523b6.png

到此,该BTREE树就已经构建完成了。BTREE 和 二叉树相比,查询数据的效率更高,因为对于相同的数据量来说,BTREE的层级结构比二叉树小,因此搜索速度更快。

B+TREE结构:

特点:

B+tree 为 BTree的变种,B+tree 和 BTree 的区别为:

n叉B+tree最多含有n个key,而BTree最多含有n-1个key;

B+tree的叶子节点保存所有的key信息,依key大小顺序排列;

B+tree只有叶子节点保存DATA信息,并且与key绑定;

B+tree所有的非叶子节点,都可以看做是key的索引部分

8d360f77832e897a41be41045135396b.png

由于B+tree,只有叶子节点保存key信息,查询任何key都要从root走到叶子。所以B+tree的查询效率更加稳定。

mysql 中的B+tree:

mysql索引数据结构对经典的B+tree进行了优化。在原B+tree的基础上,增加了一个指向相邻叶子节点的链表指针,形成了带有顺序指针的B+tree,提高区间访问性能。

结构示意图:

d62a67abd807267445dcc32a8e059ba4.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值