B树和B+树介绍 及优缺点

本文介绍了B树和B+树这两种多路平衡查找树的数据结构。B树是一种每个节点最多有m-1个关键字的平衡树,节点包含索引和数据。插入操作遵循节点关键字数量不超过m-1的原则,超出则需分裂。B+树与B树类似,但数据只存储在叶子节点,内部节点仅存储索引,且叶子节点之间通过指针链接,利于区间查找。B树和B+树因其特性在数据库索引中被广泛应用,降低磁盘IO次数,提高查找效率。
摘要由CSDN通过智能技术生成

B树也称B-树,它是一颗多路平衡查找树。二叉树我想大家都不陌生,其实,B树和后面讲到的B+树也是从最简单的二叉树变换而来的,并没有什么神秘的地方

B树的定义

一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树

每个节点最多有m-1个关键字(可以存有的键值对)。
根节点最少可以只有1个关键字。
非根节点至少有m/2个关键字。
每个节点中的关键字都按照从小到大的顺序排列,每个关键字的左子树中的所有关键字都小于它,而右子树中的所有关键字都大于它。
所有叶子节点都位于同一层,或者说根节点到每个叶子节点的长度都相同。
每个节点都存有索引和数据,也就是对应的key和value。

画出一棵B树

在这里插入图片描述

1.2 B树插入

插入的时候,我们需要记住一个规则:判断当前结点key的个数是否小于等于m-1,如果满足,直接插入即可,如果不满足,将节点的中间的key将这个节点分为左右两部分,中间的节点放到父节点中即可。

例子:在5阶B树中,结点最多有4个key,最少有2个key(注意:下面的节点统一用一个节点表示key和value)。

插入18,70,50,40
在这里插入图片描述
插入22
在这里插入图片描述
插入22时,发现这个节点的关键字已经大于4了,所以需要进行分裂,分裂的规则在上面已经讲了,分裂之后,如下。
在这里插入图片描述
接着插入23,25,39
在这里插入图片描述
分裂,得到下面的。
在这里插入图片描述
B树的删除操作比较复杂,就不解释了,大概只要理解B树长什么样子就行了。

B+树

2.1 B+树概述

B+树其实和B树是非常相似的,我们首先看看相同点:

根节点至少一个元素
非根节点元素范围:m/2 <= k <= m-1

不同点:

B+树有两种类型的节点:内部结点(也称索引结点)和叶子结点。
内部节点就是非叶子节点,内部节点不存储数据,只存储索引,数据都存储在叶子节点。
内部结点中的key都按照从小到大的顺序排列,对于内部结点中的一个key,左树中的所有key都小于它,右子树中的key都大于等于它。
叶子结点中的记录也按照key的大小排列。
每个叶子结点都存有相邻叶子结点的指针,叶子结点本身依关键字的大小自小而大顺序链接。
父节点存有右孩子的第一个元素的索引。

下面我们看一个B+树的例子,感受感受它吧!
在这里插入图片描述
只要记住B+树的数据都存储在叶子节点即可。

B树的优点

1.B树的每一个节点都包含key和value,因此经常访问的元素可能离根节点更近,因此访问也更迅速。

B+树的优点

所有的叶子结点使用链表相连,便于区间查找和遍历。B树则需要进行每一层的递归遍历。相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。
b+树的中间节点不保存数据,能容纳更多节点元素。

B树和B+树的共同优点

考虑磁盘IO的影响,它相对于内存来说是很慢的。数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘页(对应索引树的节点)。所以我们要减少IO次数,对于树来说,IO次数就是树的高度,而“矮胖”就是b++树的特征之一,m的大小取决于磁盘页的大小。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值