B树和B+树的区别

B树

    B 是 Balance(平衡)的缩写。它是一种多路的平衡搜索树。
    它跟普通的平衡二叉树的不同是,B树的每个节点可以存储多个数据,而且每个节点不止有两个子节点,最多可以有上千个子节点。
    B树中每个节点都存放着索引和数据,数据遍布整个树结构,搜索可能在非叶子节点结束,最好的情况是O(1)。
    一般一棵 B 树的高度在 3 层左右,3 层就可满足 百万级别的数据量

B+树

    叶子节点保存了完整的索引和数据,而非叶子节点只保存索引值,因此它的查询时间固定为 log(n).
    叶子节点中有指向下一个叶子节点的指针,叶子节点类似于一个单链表
    正因为叶子节点保存了完整的数据以及有指针作为连接,B+树可以增加了区间访问性,提高了范围查询,而B树的范围查询相对较差
    B+树更适合外部存储。因为它的非叶子节点不存储数据,只保存索引。

b+树相比于b树的查询优势:

    b+树的中间节点不保存数据,所以磁盘页能容纳更多节点元素,更“矮胖”;
    b+树查询必须查找到叶子节点,b树只要匹配到即可不用管元素位置,因此b+树查找更稳定(并不慢);
    对于范围查找来说,b+树只需遍历叶子节点链表即可,b树却需要重复地中序遍历

为什么会出现B-树这类数据结构

    传统用来搜索的平衡二叉树有很多,如 AVL 树,红黑树等。这些树在一般情况下查询性能非常好,但当数据非常大的时候它们就无能为力了。原因当数据量非常大时,内存不够用,大部分数据只能存放在磁盘上,只有需要的数据才加载到内存中。一般而言内存访问的时间约为 50 ns,而磁盘在 10 ms 左右。速度相差了近 5 个数量级,磁盘读取时间远远超过了数据在内存中比较的时间。这说明程序大部分时间会阻塞在磁盘 IO 上。那么我们如何提高程序性能?减少磁盘 IO 次数,像 AVL 树,红黑树这类平衡二叉树从设计上无法“迎合”磁盘。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • B树(B-树)B树又名平衡多路二叉树,和平衡二叉树的区别在于:子数节点数不同:平衡二叉树每个节点最多有两个节点,而...
    STL_f36e阅读 11,211评论 1 4
  • 一,b树 b树(balance tree)和b+树应用在数据库索引,可以认为是m叉的多路平衡查找树,但是从理论上讲...
    薛延祥阅读 1,249评论 0 0
  • B树是一种多路平衡的查找树,它的每个节点最多包含k个孩子,k被称为B树的阶,k的大小取决于磁盘页的大小。 B树具有...
    七七_2710阅读 2,229评论 0 0
  • 一、B-树和B+树的区别 很明显,我们要想弄清楚原因就要知道B-树和B+树的区别。为了不长篇大论。我们直接给出他们...
    Mccree_166a阅读 3,324评论 0 2
  • 首先纠正下:B树也叫B-tree(B-树)【B-不可以读B减树 应该是B-tree】,所以B树和B-tree,B-...
    代码搬运工LBJ阅读 6,176评论 0 0

友情链接更多精彩内容