B+树的简单介绍

前言

博客编写人:Willam
博客编写时间:2017/3/28
博主邮箱:2930526477@qq.com(有志同道合之人,可以加qq交流交流编程心得)

1、B+树的介绍

B+树是B-树的变体,也是一种多路搜索树:
其定义基本与B-树同,除了:

  1. 有n颗子树的结点中含有n个关键字
  2. 所有的叶子结点中包含了全部关键字的信息,以及指向包含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接
  3. 所有的非终端结点可以看成索引部分,结点中仅含有其子树(根结点)中最大(或最小)关键字。

如下图所示,就是一个B+树
这里写图片描述

  1. 根结点只有1个,分支数量范围[2,m]。
  2. 除根以外的非叶子结点,每个结点包含分支数范围[[m/2],m],其中[m/2]表示取大于m/2的最小整数。
  3. 所有非叶子节点的关键字数目等于它的分支数量
  4. 所有叶子节点都在同一层,且关键字数目范围是[[m/2],m],其中[m/2]表示取大于m/2的最小整数。
  5. 所有非叶子节点的关键字可以看成是索引部分,这些索引等于其子树(根结点)中的最大(或最小)关键
    字。例如一个非叶子节点包含信息: (n,A0,K0, A1,K1,……,Kn,An),其中Ki为关键字,Ai为指向子树根结点的指针,n表示关键字个数。即Ai所指子树中的关键字均小于或等于Ki,而Ai+1所指的关键字均大于Ki(i=1,2,……,n)。

  6. 叶子节点包含全部关键字的信息(非叶子节点只包含索引),且叶子结点中的所有关键字依照大小顺序链接(所以一个B+树通常有两个头指针,一个是指向根节点的root,另一个是指向最小关键字的sqt)。

2、B+树比B-树的优势

下面是B+树和B-树的一个对比截图:(来自:参考文件
这里写图片描述

为什么说B+-tree比B 树更适合实际应用中操作系统的文件索引和数据库索引?(摘抄自:参考文件

(1)B+-tree的磁盘读写代价更低

B+-tree的内部结点并没有指向关键字具体信息的指针。因此其内部结点相对B 树更小。如果把所有同一内部结点的关
键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相
对来说IO读写次数也就降低了。
    举个例子,假设磁盘中的一个盘块容纳16bytes,而一个关键字2bytes,一个关键字具体信息指针2bytes。一棵
    9阶B-tree ( 一个结点最多8个关键字) 的内部结点需要2个盘快。而B+ 树内部结点只需要1个盘快。当需要把
    内部结点读入内存中的时候,B 树就比B+ 树多一次盘块查找时间(在磁盘中就是盘片旋转的时间)。

(2)B+-tree的查询效率更加稳定

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

好的博客推荐:
https://www.phpsong.com/752.html
https://yq.aliyun.com/articles/9280
http://blog.csdn.net/qq_23217629/article/details/52512041?locationNum=9&fps=1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值