一、B树即B-树

定义:一个m阶(它的每个节点最多包含m个孩子,m就是B树的阶)的B树具有以下特征:
1. 根节点至少含有两个子女。

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

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

4. 所有的叶子节点都位于同一层,叶子节点不包含任何关键信息。

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

二、B+树

定义:一个m阶的B+树具有以下特征:
1. 有k个子树的中间节点包含有k个元素(B树是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点中。

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

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

4. B+树查找时是自上向下查找,B-树是从下向上查找(中序遍历)。


需要注意的是:根节点的最大元素就是整个B+树的最大元素,以后无论插入删除多少元素,始终要保持最大元素在根节点中。每个叶子节点都带有指向下一个节点的指针,形成了一个有序链表。

三、B-树和B+树的区别

1、卫星数据的位置不同:
(所谓的卫星数据,指的是索引元素所指向的数据记录,比如数据库中的某一行。)
B-树:无论是中间节点还是叶子节点都带有卫星数据,即无论在哪里找到都直接返回。

B+树:只有叶子节点带有卫星数据,其余中间节点仅仅是索引,没有任何数据关联。

(补充:在数据库的聚集索引中,叶子节点直接包含卫星数据。在非聚集索引中,叶子节点带有指向卫星数据的指针,需要再做一次回表查找)

这样设计的好处:

①:单元素查询的时候,B+树自顶向下查找节点,最终找到匹配的叶子节点:

例如:查找元素3,需要三次磁盘IO操作。
B+树的优势在:
1)B+树的中间节点没有卫星数据,所以同样大小的磁盘页可以容纳更多的节点元素。在相同的数据量下,B+树的结构比B-树更加“矮胖”,因此查询时IO次数更少。
2)B+树的查询最终都会到达叶子节点,而B-树只要找到匹配元素即可,无论是在中间节点还是叶子节点,因此B-树的查找性能不稳定(最好是根节点,最坏是叶子节点),而B+树每次查找都是稳定的。

②:范围查询的时候,例如查询3-11的范围
B-树需要单行查询到3,再中序遍历到11,比较繁琐。

B+树只要自顶向下找到3,然后通过链表指针,向右遍历到11即可。

总结B+树的优势:

1.单一节点存储更多的元素(这样该节点下分支变多了,树变矮胖了),使得查询的IO次数更少。

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

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

什么是B-树和B+树?相关推荐

  1. AVL树、splay树(伸展树)和红黑树比较

    AVL树.splay树(伸展树)和红黑树比较 一.AVL树: 优点:查找.插入和删除,最坏复杂度均为O(logN).实现操作简单 如过是随机插入或者删除,其理论上可以得到O(logN)的复杂度,但是实 ...

  2. B树,B+树,B-树和B*树

    B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B ...

  3. 胜者树和败者树 - qianye0905 - 博客园

    胜者树和败者树 - qianye0905 - 博客园 胜者树和败者树 胜者树和败者树都是完全二叉树,是树形选择排序的一种变型.每个叶子结点相当于一个选手,每个中间结点相当于一场比赛,每一层相当于一轮比 ...

  4. 浅谈树形结构的特性和应用(上):多叉树,红黑树,堆,Trie树,B树,B+树......

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 上篇文章我们主要介绍了线性数据结构,本篇233酱带大家看看 无所不 ...

  5. B树、B-树、B+树、B*树

    B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B ...

  6. 0x16.基本数据结构 — Trie树(字典树)+ A C 自 动 机

    目录 用TrieTrieTrie树来处理整数异或问题是真的舒服! 一.TrieTrieTrie树 TrieTrieTrie的基本操作 0.初始化 1.插入 2.检索 二.TrieTrieTrie树例题 ...

  7. P1047 校门外的树(线段树优化)(校门三部曲)难度⭐⭐

    校门三部曲,总算完结了!完结散花! 难度呈阶梯状,都可以用线段树解决. 第一部 P1047 校门外的树(线段树优化)难度⭐⭐ 第二部 P1276 校门外的树(增强版)(线段树)校门三部曲难度⭐⭐⭐ 第 ...

  8. 模型树——就是回归树的分段常数预测修改为线性回归 对于非线性回归有较好的预测效果...

    说完了树回归,再简单的提下模型树,因为树回归每个节点是一些特征和特征值,选取的原则是根据特征方差最小.如果把叶子节点换成分段线性函数,那么就变成了模型树,如(图六)所示: (图六) (图六)中明显是两 ...

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

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

  10. KD树是什么? 为什么要用KD树? KD树怎么用? KD树和KNN的关联是什么?

    KD树是什么? 为什么要用KD树? KD树怎么用? KD树和KNN的关联是什么? sklearn中如何配置? 为了提高KNN的搜索效率,这里介绍一种可以减少计算距离次数的方法---KD树方法. KD树 ...

最新文章

  1. IDEA 方法注释模板和类注释模板
  2. git 源代码自动检查_检查提交(git log,git show)《 Nest.js 应用案例:源代码管理 》...
  3. aws架构_如何使用AWS构建可扩展架构
  4. jsp论坛网站模版_网站关键词优化怎么做
  5. java excel自动保存_java读取excel的内容(可保存到数据库中)
  6. ppt 2 html工具,PPTools PPT2HTML
  7. VxWorks任务调度
  8. 程序员修神之路:问世间异步为何物?
  9. 关于e的等式及相关证明
  10. 境内银行卡磁条信息格式
  11. 在.NET项目中使用PostSharp,使用MemoryCache实现缓存的处理
  12. 宝塔系统linux xss,宝塔漏洞 XSS窃取宝塔面板管理员漏洞高危
  13. tinyxml初体验
  14. w7 internet信息服务器,Win7安装IIS Internet信息服务步骤
  15. 什么是Trunk端口模式?此模式有何作用?
  16. BBU与RRU、RRH
  17. C语言简单实现世界协调时UTC与北京时间BJT转换
  18. 张邦鑫:组织文化 - 价值观打造方法论初步
  19. 高估问题以及解决方法
  20. 数据结构初阶之二叉树——概念篇

热门文章

  1. jQuery控制文本框只读属性
  2. Retina屏幕下image-set
  3. 2022年危险化学品经营单位主要负责人考试题及在线模拟考试
  4. android 主流机型适配,Android 10将适配三年前机型,再度证明了旗舰的价值
  5. 吉他谱软件guitar pro2023吉他和弦、六线谱、BASS四线谱绘制
  6. 对于脏读,不可重复读,幻读的一点理解,看懂红字很关键
  7. Spring IO 平台介绍
  8. Eclipse build项目
  9. ios麦克风音量实时检测
  10. 阿里技术专家:谈谈软件开发中的 “过度设计”