b树和b+树

b树和b+树都是应用于数据库索引的,b树与二叉树的区别是,b树是m叉的多路平衡查找树。

理论上来说二叉树的查找速度和比较次数是最少的,但数据库用b树不用二叉树的原因是b树的高度比二叉树小,数据库索引是建立在磁盘上的,所以我们应该减少IO次数,对于树来说,IO次数就是树的高度。

b树的每个节点最多包含m个孩子,m成为树的阶,m的大小取决于磁盘的大小。

b树的特点:

  1. 任意非叶子结点最多只有m个儿子,m > 2
  2. 根节点的儿子数为[2,m]
  3. 除根节点以外的非叶子结点的儿子数为[m/2,m]
  4. 非叶子结点的关键字个数=儿子数 - 1
  5. 所有叶子结点位于同一层
  6. 对于一个非叶子结点,k个关键字把结点拆成k+1段,分别指向k+1个结点

关于b树的一些特征:

  1. 关键字集合分布在节点中
  2. 任何一个关键字出现且只出现在一个结点中
  3. 搜索可能在非叶子结点中结束
  4. 搜索性能等价于在全集内做一次二分查找

b+树是b树的一种变体,查询性能更好。

b+树的特征:

  1. 有k棵子树的非叶子结点中包含k个关键字(b树为k-  1个),这些关键字不保存数据,只用来索引,所有数据都保存在叶子结点中(b树为所有结点中都保存数据)
  2. 叶子结点的数据为自小而大顺序链接,所有非叶子结点包含了子节点的最大或最小关键字
  3. 同一个关键字出现在不同节点中,在根节点中的最大元素就是整个树中的最大元素

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

  1. 中间结点不保存数据,只保存了这些数据的关键信息以便索引,所以b+树更加矮胖,IO次数更少
  2. b+树查询必须查到叶子结点,b树有可能查询到中间结点就找到 了匹配元素,b+树更稳定,但速度并不慢
  3. 对于范围查找,因为b+树的数据是自小而大在叶子结点中排序的,所以只需要遍历叶子结点链表即可,而b树需要重复中序查找
posted @ 2020-01-03 10:24  leviH  阅读(564)  评论(0编辑  收藏  举报