B树和B+树

B树和B+树

一、为什么需要B树

B树和二叉树、红黑树相比较,子树更多也就是路数越多,子树越多表示数的高度越低,搜索效率越高。

二、什么是B树

一种平衡的多叉树,称为B树 。

一棵m阶的B树的满足条件:

  • 对于M-树:最多允许有M个孩子,意思就是最多有 M-1 个 key
  • 节点中 key 必须按序存储(任何搜索树中都不允许 key 重复,所以永远不会出现 key 相等情况)

性质

  1. B-树,一个节点最多只能有 M 个孩子,最多只能有 (M-1)个 key
  2. 除了根之外的节点,至少(M - 1)/ 2 个 key
  3. 节点中 key 按序排列
  4. B-树,所有叶子节点都在同一层–平衡
三、插入的过程

插入过程:

  1. 所有B-树的插入,只能发生再叶子节点上
  2. 如果随着插入,破坏了节点最多拥有的key的数量,则会造成节点的分裂—树向上生长
    1. 最小有 (M- 1)/2 个key
    2. 所有叶子都在同一层

举例:3阶B树,插入1,2,3,4,5过程:
在这里插入图片描述

三、B树的缺点

  • 每个节点中既要存索引信息,又要存其对应的数据,如果数据很大,那么当树的体量很大时,每次读到内存中的树的信息就会不太够。

  • B树遍历整个树的过程和二叉树本质上是一样的,B树相对二叉树虽然提高了磁盘IO性能,但并没有解决遍历元素效率低下的问题。

针对以上两个问题,B+树诞生了。

四、B+树

同样插入1,2,3,4,5,B+树插入后为:
在这里插入图片描述

B+树相比B树,本质上是一样的,区别就在与B+树的所有根节点都不带有任何数据信息,只有索引信息,所有数据信息全部存储在叶子节点里,这样,整个树的每个节点所占的内存空间就变小了,读到内存中的索引信息就会更多一些,相当于减少了磁盘IO次数,问题1就得到了解决。又由B树的性质可以得到,所有叶子节点都会在同一层,B+树会以一个链表的形式将所有叶子节点的信息全部串联起来,这样,想遍历所有数据信息只需要顺序遍历叶子节点就可以了,方便又高效,问题二就得到了解决。不仅如此,B+树还有一个相应的优质特性,就是B+树的查询效率是非常稳定的,因为所有信息都存储在了叶子节点里面,从根节点到所有叶子节点的路径是相同的。那么,我们总结一下B+树的优点:

  • B+树的磁盘读写代价更低

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

  • B+树的数据信息遍历更加方便

B+树只要遍历叶子节点就可以实现整棵树的遍历,而B树不支持这样的操作(或者说效率低),而且在数据库中基于范围的查询是非常频繁的,所以数据库索引基本采用B+树

  • B+树的查询效率更加稳定

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值