美文网首页
B-树和B+树

B-树和B+树

作者: 环球探测 | 来源:发表于2016-04-06 09:24 被阅读2133次

参考链接:
MySQL索引背后的数据结构及算法原理
B树、B-树、B+树、B*树

1.B-Tree

为了描述B-Tree,首先定义一条数据记录为一个二元组[key, data],key为记录的键值,对于不同数据记录,key是互不相同的;data为数据记录除key外的数据。那么B-Tree是满足下列条件的数据结构:

  • d为大于1的一个正整数,称为B-Tree的度。
  • h为一个正整数,称为B-Tree的高度。
  • 每个非叶子节点由n-1个key和n个指针组成,其中d<=n<=2d。
  • 子节点最少包含一个key和两个指针,最多包含2d-1个key和2d个指针,叶节点的指针均为null 。
  • 所有叶节点具有相同的深度,等于树高h。
  • key和指针互相间隔,节点两端是指针。
  • 一个节点中的key从左到右递增排列。
  • 如果某个指针在节点node的左右相邻key分别是key1和key2且不为null,则其指向的节点的所有key小于key2且大于key1.
    下图是一个B-Tree:
Paste_Image.png

由于B-Tree的特性,在B-Tree中按key检索数据的算法非常直观:首先从根节点进行二分查找,如果找到则返回对应节点的data,否则对相应区间的指针指向的节点递归进行查找,直到找到节点或找到null指针,前者查找成功,后者查找失败。

另外,由于插入删除新的数据记录会破坏B-Tree的性质,因此在插入删除时,需要对树进行一个分裂、合并、转移等操作以保持B-Tree性质,本文不打算完整讨论B-Tree这些内容,因为已经有许多资料详细说明了B-Tree的数学性质及插入删除算法。

2.B+Tree

B-Tree有许多变种,其中最常见的是B+Tree,例如MySQL就普遍使用B+Tree实现其索引结构。
与B-Tree相比,B+Tree有以下不同点:

  • 每个节点的指针上限为2d而不是2d+1。
  • 内节点不存储data,只存储key;叶子节点不存储指针。
  • 非叶子结点的子树指针与关键字个数相同;
  • 非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-Tree是开区间
  • 为所有叶子结点增加一个链指针;

下面是一个简单的B+Tree示意。

Paste_Image.png

一般来说,B+Tree比B-Tree更适合实现外存储索引结构,具体原因与外存储器原理及计算机存取原理有关。
在B+Tree的每个叶子节点增加一个指向相邻叶子节点的指针,就形成了带有顺序访问指针的B+Tree。做这个优化的目的是为了提高区间访问的性能,例如图中如果要查询key为从20到33的所有数据记录,当找到20后,只需顺着节点和指针顺序遍历就可以一次性访问到所有数据节点,极大提到了区间查询效率。

相关文章

  • B树、B+树、B*树

    B-树 B+树 B*树

  • B树B-树和B+树的总结

    参考:B树和B+树的总结B树、B-树、B+树、B*树都是什么 总结 利用平衡树的优势加快查询的稳定性和速度;B+树...

  • 如何手写b-树,b+树建立过程?

    要想手写b-树和b+树的建立过程,就得清楚b-树和b+树性质性质不清楚的人请看文章最后,我们现在先开始建树吧。 b...

  • 聊一聊B+树

    标签: 图解B+树 | B+树代码|mysql 聚集索引|mysql B+树索引| 前言   虽然B+是B-演化过...

  • B-树/B+树

    B-树(Balance树)和B+树应用与数据库索引,是m叉的多路平衡查找树。 1. 性质分析 1.1 M阶B-树 ...

  • Mysql InnoDB B+树索引和哈希索引的区别?Mongo

    Mysql InnoDB B+树索引和哈希索引的区别?MongoDB 为什么使用B-树?

  • 树-二叉搜索树-平衡二叉树-红黑树-B树B+树

    关于树的总结从二叉树->二叉搜索树->平衡二叉树->红黑树->B树与B+树 B+树介绍 B树、B-树、B+树、B*...

  • B+树

    B+树是基于B-树的一种变体,有着比B-树更高的查询性能。一个m阶的B+树具有如下几个特征: 有k个子树的中间节点...

  • B-树和B+树

    B-树 B树是普遍运用于文件系统和数据库的一种多叉平衡查找树。 B树中所有结点中孩子结点个数的最大值成为B树的阶,...

  • B-树和B+树

    参考链接:MySQL索引背后的数据结构及算法原理B树、B-树、B+树、B*树 1.B-Tree 为了描述B-Tre...

网友评论

      本文标题:B-树和B+树

      本文链接:https://www.haomeiwen.com/subject/jmeklttx.html