一个m阶的B树具有如下几个特征:

  • 根结点至少有两个子女。

  • 每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m

  • 每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m

  • 所有的叶子结点都位于同一层。

  • 每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。

一个m阶的B+树具有如下几个特征:

  • 有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。

  • 所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。

  • 所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。

B-树中的卫星数据(Satellite Information):

B+树中的卫星数据(Satellite Information):

需要补充的是,在数据库的聚集索引(Clustered Index)中,叶子节点直接包含卫星数据。在非聚集索引(NonClustered Index)中,叶子节点带有指向卫星数据的指针。

第一次磁盘IO:

第二次磁盘IO:

第三次磁盘IO:

B-树的范围查找过程

自顶向下,查找到范围的下限(3):

中序遍历到元素6:

中序遍历到元素8:

中序遍历到元素9:

中序遍历到元素11,遍历结束:

B+树的范围查找过程

自顶向下,查找到范围的下限(3):

通过链表指针,遍历到元素6, 8:

通过链表指针,遍历到元素9, 11,遍历结束:

B+树的特征:

  • 有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。

  • 所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。

  • 所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。

B+树的优势:

  • 单一节点存储更多的元素,使得查询的IO次数更少。

  • 所有查询都要查找到叶子节点,查询性能稳定。

  • 所有叶子节点形成有序链表,便于范围查询。

原文链接:B-树与B+树 两者的区别 - 20189223 - 博客园

B树与B+树 两者的区别相关推荐

  1. B树和B+树分别是什么?区别在哪里?MySQL使用的是哪一种树?

    B树和B+树分别是什么?区别在哪里?MySQL使用的是哪一种树? B树,每个节点都存储key和data,所有节点组成这棵树,并且叶子节点指针为nul,叶子结点不包含任何关键字信息. B+树,所有的叶子 ...

  2. b树与b+树的区别_Linux内核-数据结构系列(B树、B-树、B+树)的区别

    一.B树 (二叉搜索树) B 树可以看作是对2-3查找树的一种扩展,即他允许每个节点有M-1个子节点. 根节点至少有两个子节点 每个节点有M-1个key,并且以升序排列 位于M-1和M key的子节点 ...

  3. MyISAM和InnoDB执行引擎的区别,为什么MyISAM查询效率高,B树和B+树的区别

    1. MyISAM和InnoDB的区别 ①MyISAM查询效率高,InnoDB查询效率低: ②MyISAM不支持事务和外键,而InnoDB支持: ③MyISAM是非聚簇索引(索引的叶子节点存储的是数据 ...

  4. b树与b+树的区别_面试必考:B树、B树、B+树、B*树图文详解

    B树 B树又叫做二叉搜索树,倒状的树形结构.如下图所示 特点: 所有的非子夜节点最多拥有两个子节点树(左子树和右子树). 所有结点存储一个关键字. 节点的左右儿子,左边是比该节点小的,右边是比该节点大 ...

  5. b树与b 树的区别 mysql,B树和B+树

    一.为什么要有B树? 学习任何一个东西我们都要知道为什么要有它,B树也一样,既然存储数据,我们为什么不用红黑树呢? 这个要从几个方面来说了: (1)计算机有一个局部性原理,就是说,当一个数据被用到时, ...

  6. B树与B+树简明扼要的区别

    看了很多讲B树和B+树的文章,大多都是围绕各自的特性讲的,第一,树中每个结点最多含有m个孩子(m>=2):第二,--我也是从这些文章里弄懂了各种树的联系与区别,要真写,我可能还不如人家写得好.所 ...

  7. 二叉树、B树、B+树、红黑树 的 本质区别以及各个应用场景

    文章目录 我们先来看一个场景,然后再看下面的定义,以便深刻理解和记忆 二叉树 B树 B+树 红黑树 我们先来看一个场景,然后再看下面的定义,以便深刻理解和记忆 https://blog.csdn.ne ...

  8. 【154期】面试官问:请你说说 B 树、B+ 树的原理及区别?

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方留言必回,有问必答! 每天 08:35 更新文章,每天进步一点点... 之前在 ...

  9. 一文彻底搞懂MySQL基础:B树和B+树的区别

    写在前面 大家在面试的时候,肯定都会被问到MySql的知识,以下是面试场景: 面试官:对于MySQL,你对他索引原理了解吗? 我:了解 面试官:MySQL的索引是用什么数据机构的? 我:B+树 面试官 ...

  10. Mysql中B树与B+树的区别

    一.B树 B树和B+树都是应用在数据库索引上,可以认为是m叉的多路平衡查找树,但是理论上讲,二叉树的查找速度和比较次数都更小,为什么不用二叉树呢? 这是因为我们要考虑磁盘IO的影响,它相对于内存来说是 ...

最新文章

  1. 总结—elasticsearch启动失败的几种情况及解决
  2. 沫沫金:Java快速合并两个数组【绝技】
  3. Watcher 实现机制之client注冊
  4. onnxruntime c++ 工程实例
  5. LeetCode 98验证二叉搜素树(中序遍历)99恢复二叉搜索树
  6. P2408 不同子串个数
  7. plsql例外_大例外背后的真相
  8. linux 脚本批量删除,Linux Shell使用Bash脚本批量删除文件
  9. 五分钟彻底学会iptables防火墙--技术流ken
  10. POJ 2406题解kmp算法的应用
  11. OpenModelica结果文件(.mat格式)说明
  12. const T vs. T const ——Dan Saks 【翻译】
  13. 【多传感器融合定位】【从零开始做自动驾驶定位_任佬】【所学到的东西汇总】
  14. Contrastive Learning Rivals Masked Image Modeling in Fine-tuning via Feature Distillation
  15. 阿里P8专家年薪170万IT男征婚被嘲讽?钱不是万能的!
  16. ARC缓存淘汰算法及其在ZFS上的实现
  17. 动态分区最佳适应算法c语言,使用最佳适应算法对内存实现模拟动态分区管理...
  18. Hudi--mor表 VS cow表
  19. Segment Anything论文详解(SAM)
  20. CF Round597 Div.2

热门文章

  1. 夏天有稍微热一点的说法,但是没有冬天没有稍微冷一点的说法
  2. 《Gpu Gems》《Gpu Pro》《Gpu Zen》资源收集
  3. UNITY 画布的粗浅理解
  4. Java中如何读写cookie (二)
  5. 【资源】C++学习资料 - 逆天整理 - 精华无密版【最新】
  6. VS2008 fatal error LNK1000: Internal error during IncrBuildImage 解决方案
  7. 刘宇凡:自媒体不是自媒体 应是志媒体
  8. 八款开源Android游戏引擎
  9. windowsDOS命令
  10. 电脑间用网线传输文件的方法Win10-Win10(Win7)