B树与B+树

原文地址

B-树就是B树(二分查找法)

目录

引言

B树

B+树

B树卫星数据

B+树卫星数据

B树范围查找

B+树范围查找

B+树相比B树的优势

使用


引言

疑问:二叉树的查找时间复杂度是O(log N),查找效率已经够高了,为什么还有B树与B+树的出现呢?难道它俩的时间复杂度比二叉树还小吗?

当然不是,B树与B+树出现的原因是因为磁盘I O;I/O操作效率低,在大量数据中查询时,我们不可能一下子将所有数据加载到内存中,只能逐一加载磁盘页,每个磁盘页对应树的节点。

平衡二叉树由于树深度过大而造成磁盘I O读写过于频繁,进而导致效率低下。

为了减少磁盘IO次数,就必须降低树的深度,将“瘦高”(平衡二叉树)的树变得“矮胖”(B树)。基本想法是:

  1. 每个节点存储多个元素
  2. 摒弃二叉树结构,采用多叉树

这样就引出了一个新的查找树结构:多路查找树

B树

示例:三阶B树

特点

  • 树的节点都包含元素信息

B+树

B+树是B树的变种,有着比B树更高的效率。

示例:3阶B+树

特点

  • 元素不保存数据,只用来索引,所有数据都保存在叶子结点;(意味着同样大小的磁盘页可以容纳更多节点元素,使树更加矮胖,IO操作更少)
  • 叶子结点包含了全部元素信息,且本身依赖关键字大小,自小而大顺序链接;
  • 所有的中间节点都存在于叶子节点中;

B树卫星数据

B树节点数据存储在元素中,查找时只需要匹配到元素即可,最好情况是查询到跟节点,最坏情况是查询到叶子节点;

B+树卫星数据

B+树节点数据都存储在叶子节点中,每次查询都必须到叶子节点才能获取到数据;在范围查找方便B+树更有优势;

B树范围查找

[3-11]

B+树范围查找

[3-11]

B+树相比B树的优势

  1. 单一节点存储更多的元素,使得查询的IO次数更少; 
  2. 所有查询都要查找到叶子节点,查询性能稳定;
  3. 所有叶子节点形成有序链表,便于范围查询;

使用

B树主要用于文件系统以及部分数据库索引,例如: MongoDB。而大部分关系数据库则使用B+树做索引,例如:mysql数据库; 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值