什么是B-树和B+树?

4 篇文章 0 订阅
1 篇文章 0 订阅

一、B树即B-树

定义:一个m阶(它的每个节点最多包含m个孩子,m就是B树的阶)的B树具有以下特征:
1. 根节点至少含有两个子女。

2. 每个中间节点都包含k-1个元素和k个孩子,其中m/2 <= k <=m。

3. 每个叶子节点都包含k-1个元素,其中m/2 <= k <= m。

4. 所有的叶子节点都位于同一层,叶子节点不包含任何关键信息。

5. 每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域划分。

在这里插入图片描述

二、B+树

定义:一个m阶的B+树具有以下特征:
1. 有k个子树的中间节点包含有k个元素(B树是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点中。

2. 所有的叶子节点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子节点本身依关键字的大小自小而大顺序链接。(链表)

3. 所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。

4. B+树查找时是自上向下查找,B-树是从下向上查找(中序遍历)。

在这里插入图片描述
需要注意的是:根节点的最大元素就是整个B+树的最大元素,以后无论插入删除多少元素,始终要保持最大元素在根节点中。每个叶子节点都带有指向下一个节点的指针,形成了一个有序链表。

三、B-树和B+树的区别

1、卫星数据的位置不同:
(所谓的卫星数据,指的是索引元素所指向的数据记录,比如数据库中的某一行。)
B-树:无论是中间节点还是叶子节点都带有卫星数据,即无论在哪里找到都直接返回。
在这里插入图片描述

B+树:只有叶子节点带有卫星数据,其余中间节点仅仅是索引,没有任何数据关联。
在这里插入图片描述
(补充:在数据库的聚集索引中,叶子节点直接包含卫星数据。在非聚集索引中,叶子节点带有指向卫星数据的指针,需要再做一次回表查找)

这样设计的好处:

①:单元素查询的时候,B+树自顶向下查找节点,最终找到匹配的叶子节点:
在这里插入图片描述
例如:查找元素3,需要三次磁盘IO操作。
B+树的优势在:
1)B+树的中间节点没有卫星数据,所以同样大小的磁盘页可以容纳更多的节点元素。在相同的数据量下,B+树的结构比B-树更加“矮胖”,因此查询时IO次数更少。
2)B+树的查询最终都会到达叶子节点,而B-树只要找到匹配元素即可,无论是在中间节点还是叶子节点,因此B-树的查找性能不稳定(最好是根节点,最坏是叶子节点),而B+树每次查找都是稳定的。

②:范围查询的时候,例如查询3-11的范围
B-树需要单行查询到3,再中序遍历到11,比较繁琐。
在这里插入图片描述
B+树只要自顶向下找到3,然后通过链表指针,向右遍历到11即可。
在这里插入图片描述

总结B+树的优势:

1.单一节点存储更多的元素(这样该节点下分支变多了,树变矮胖了),使得查询的IO次数更少。

2.所有查询都要查找到叶子节点,查询性能稳定。

3.所有叶子节点形成有序链表,便于范围查询。

  • 4
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值