B树与B+树

1.B树数据结构
1.1B-Tree
B-Tree,B树是一种多叉路衡查找树,相对于二叉树,B树每个节点可以有多个分支,即多叉。 以一颗最大度数(max-degree)为5(5阶)的b-tree为例,那这个B树每个节点最多存储4个key,5 个指针:

特点:

5阶的B树,每一个节点最多存储4个key,对应5个指针。

一旦节点存储的key数量到达5,就会裂变,中间元素向上分裂。

在B树中,非叶子节点和叶子节点都会存放数据。

一颗b树,浅蓝色的块称之为一个个磁盘块,每个磁盘块包含几个数据项(白色表示)和指针(黄色表示),例如磁盘1包含数据项有17和35,包含指针p1,p2,p3。

p1指向小于17的磁盘块,p2指向大于17,小于35的磁盘块,p3指向大于35的磁盘块。

1.2 B+Tree
B+Tree是B-Tree的变种,我们以一颗最大度数(max-degree)为4(4阶)的b+tree为例,来看一下其结构示意图:

我们可以看到,两部分:

蓝色框框起来的部分,是索引部分,仅仅起到索引数据的作用,不存储数据。

红色框框起来的部分,是数据存储部分,在其叶子节点中要存储具体的数据。

最终我们看到,B+Tree 与 B-Tree相比,主要有以下三点区别:

所有的数据都会出现在叶子节点。

叶子节点形成一个单向链表。

非叶子节点仅仅起到索引数据作用,具体的数据都是在叶子节点存放的。

为什么说B+Tree比B-Tree更适合实际应用中操作系统的文件索引和数据库索引?

B+Tree的磁盘读写代价更低 B+Tree的内部节点并没有指向关键字具体信息的指针。因此其内部节点相对BTree更小,如果把所有同一内部节点的关键字存放在同一个盘块中,那么盘块所能容纳的关键字数量也越多。一次性读取到内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了

B+Tree的查询效率更加稳定 由于非叶子节点不是最终指向文件内容的节点,而是叶子节点中关键字的索引,所以任何关键字的查找都必须走一条从根节点到叶子节点的路。所有关键字的路径长度相同,导致每个数据的查询效率相当。

上述我们所看到的结构是标准的B+Tree的数据结构,接下来,我们再来看看MySQL中优化之后的

B+Tree。

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

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值