最近在梳理数据结构的相关知识,在梳理到B树时发现网上有一篇图文并茂介绍B树相关知识的文章,特转载自此。原文链接。

一个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+树有以下优势:

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

再次感谢原文作者产出这么一篇图文并茂的好文。

数据结构学习系列 -- 漫画B B+树相关推荐

  1. 数据结构学习系列文章合集

    数据结构学习系列文章目录 前言 1.稀疏数组和队列 稀疏数组和二位数组的转换 数组队列的实现 环形队列的介绍与实现 2.链表 单链表的增.删.改.查 总结 前言 学习数据结构记录,作为自己的笔记,同时 ...

  2. 浙大版数据结构学习系列内容汇总

    数据结构 一.基本概念 二.线性结构 三.树 四.图 五.排序 六.散列查找   学习浙大版数据结构系列课程过程中使用C++实现的课程对应练习代码和编程作业代码,点击 → Github链接进行查看. ...

  3. 数据结构学习记录——哈夫曼树(什么是哈夫曼树、哈夫曼树的定义、哈夫曼树的构造、哈夫曼树的特点、哈夫曼编码)

    目录 什么是哈夫曼树 哈夫曼树的定义 哈夫曼树的构造 图解操作 代码实现 代码解析 哈夫曼树的特点 哈夫曼编码 不等长编码 二叉树用于编码 哈夫曼编码实例 什么是哈夫曼树 我们先举个例子: 要将百分制 ...

  4. 算法与数据结构学习(46)-B树、B+树和B*树

    B树的介绍 B-tree树即B树,B即Balanced,平衡的意思.有人把B-tree翻译成B-树,容易让人产生误解.会以为B-树是一种树,而B树又是另一种树.实际上,B-tree就是指的B树. 前面 ...

  5. Java学习系列及数据结构博客全目录

    Java学习系列 Java学习系列(一)Java的运行机制.JDK的安装配置及常用命令详解 Java学习系列(二)Java注释.标识符.基本数据类型及其转换易错点详解 Java学习系列(三)Java运 ...

  6. 数据结构学习笔记(3-5):树

    附录:所有blog的链接 数据结构学习笔记(1):基本概念 数据结构学习笔记(2):线性结构 数据结构学习笔记(3-5):树 数据结构学习笔记(6-8):图 数据结构学习笔记(9-10):排序 数据结 ...

  7. 数据结构专题-学习笔记:李超线段树

    数据结构专题 - 学习笔记:李超线段树 1. 前言 2. 详解 3. 应用 4. 总结 5. 参考资料 1. 前言 本篇博文是博主学习李超线段树的学习笔记. 2020/12/21 的时候我在 线段树算 ...

  8. 数据结构学习——哈夫曼树

    数据结构学习记录DAY13 :哈夫曼树(上) 哈(赫)夫曼树和哈(赫)夫曼编码 路径 一个结点到另外一个结点的通路,称为路径 (祖先结点到子孙结点) 路径长度: 每经过一个结点,路径长度就增加1,不包 ...

  9. Python数据结构学习笔记——树和图

    目录 一.树的概念 二.二叉树的实现 (一)列表的列表 (二)结点与引用 三.图的概念 四.图的实现 (一)邻接矩阵 (二)邻接表 一.树的概念 树是一种数据结构,树由结点及连接结点的边组成,每个树有 ...

最新文章

  1. 深入理解Python闭包概念
  2. EBS R12中如何使用CGI登录Form
  3. 微服务Apache ServiceComb 数据一致性Saga演进介绍
  4. log4net 日志框架的配置
  5. 项目Wiki的选择和配置
  6. VGGNet论文翻译-Very Deep Convolutional Networks for Large-Scale Image Recognition
  7. CentOS和AIX查看系统序列号
  8. 智汇华云 | 集群自动化部署服务流程之自动化集群配置(上)
  9. 数字化转型背景下的“新IT职业教育” | 职业教育系列报告(四)
  10. LOJ10068 秘密的牛奶运输
  11. 计算机键盘上fn键,笔记本电脑键盘上Fn键的详细介绍
  12. php学习日志(5)-解决Windows Live Writer错误:WindowsLive.Writer.CoreServices.HttpRequestHelper的类型初始值设定发生异常...
  13. AirServer7ios苹果手机专用投屏PC电脑工具
  14. 什么是商业智能 (BI) 仪表板?
  15. OC基础--对象做参数在方法间传递
  16. ubuntu中vim编辑模式退格键无法删除,方向键乱入ABCD解决方法
  17. 3. 使用balsam.exe / balsamui.exe转换3D模型为 Mesh 文件共View3D的Model使用
  18. SPA(单页面)和MPA(多页面)的区别与优缺点
  19. LSTM-长短时记忆网络
  20. Unity3D 个人尝试经验总结

热门文章

  1. 在两个高程点之间如何生成加密点_南方CASS入门:[11]高程点加密和问题
  2. Chive CTF 2020 - Tiki
  3. 关于expdp ESTIMATE_only以及EXPDP和EXP HWM降低的比较
  4. RAC 常用管理命令
  5. 电工基础知识分享(四):图文并茂,史上最全万用表使用手册
  6. TextInputEditText样式设置
  7. java 程序员,是不是很想进字节跳动?开发三年的我拿到了入职通知
  8. Luat 功能开发教程(七) 基站 WIFI定位
  9. 创意家具设计师主页模板
  10. 1826: [JSOI2010]缓存交换