什么是B-树和B+树?
一、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+树?相关推荐
- AVL树、splay树(伸展树)和红黑树比较
AVL树.splay树(伸展树)和红黑树比较 一.AVL树: 优点:查找.插入和删除,最坏复杂度均为O(logN).实现操作简单 如过是随机插入或者删除,其理论上可以得到O(logN)的复杂度,但是实 ...
- B树,B+树,B-树和B*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B ...
- 胜者树和败者树 - qianye0905 - 博客园
胜者树和败者树 - qianye0905 - 博客园 胜者树和败者树 胜者树和败者树都是完全二叉树,是树形选择排序的一种变型.每个叶子结点相当于一个选手,每个中间结点相当于一场比赛,每一层相当于一轮比 ...
- 浅谈树形结构的特性和应用(上):多叉树,红黑树,堆,Trie树,B树,B+树......
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 上篇文章我们主要介绍了线性数据结构,本篇233酱带大家看看 无所不 ...
- B树、B-树、B+树、B*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B ...
- 0x16.基本数据结构 — Trie树(字典树)+ A C 自 动 机
目录 用TrieTrieTrie树来处理整数异或问题是真的舒服! 一.TrieTrieTrie树 TrieTrieTrie的基本操作 0.初始化 1.插入 2.检索 二.TrieTrieTrie树例题 ...
- P1047 校门外的树(线段树优化)(校门三部曲)难度⭐⭐
校门三部曲,总算完结了!完结散花! 难度呈阶梯状,都可以用线段树解决. 第一部 P1047 校门外的树(线段树优化)难度⭐⭐ 第二部 P1276 校门外的树(增强版)(线段树)校门三部曲难度⭐⭐⭐ 第 ...
- 模型树——就是回归树的分段常数预测修改为线性回归 对于非线性回归有较好的预测效果...
说完了树回归,再简单的提下模型树,因为树回归每个节点是一些特征和特征值,选取的原则是根据特征方差最小.如果把叶子节点换成分段线性函数,那么就变成了模型树,如(图六)所示: (图六) (图六)中明显是两 ...
- B树和B+树分别是什么?区别在哪里?MySQL使用的是哪一种树?
B树和B+树分别是什么?区别在哪里?MySQL使用的是哪一种树? B树,每个节点都存储key和data,所有节点组成这棵树,并且叶子节点指针为nul,叶子结点不包含任何关键字信息. B+树,所有的叶子 ...
- KD树是什么? 为什么要用KD树? KD树怎么用? KD树和KNN的关联是什么?
KD树是什么? 为什么要用KD树? KD树怎么用? KD树和KNN的关联是什么? sklearn中如何配置? 为了提高KNN的搜索效率,这里介绍一种可以减少计算距离次数的方法---KD树方法. KD树 ...
最新文章
- IDEA 方法注释模板和类注释模板
- git 源代码自动检查_检查提交(git log,git show)《 Nest.js 应用案例:源代码管理 》...
- aws架构_如何使用AWS构建可扩展架构
- jsp论坛网站模版_网站关键词优化怎么做
- java excel自动保存_java读取excel的内容(可保存到数据库中)
- ppt 2 html工具,PPTools PPT2HTML
- VxWorks任务调度
- 程序员修神之路:问世间异步为何物?
- 关于e的等式及相关证明
- 境内银行卡磁条信息格式
- 在.NET项目中使用PostSharp,使用MemoryCache实现缓存的处理
- 宝塔系统linux xss,宝塔漏洞 XSS窃取宝塔面板管理员漏洞高危
- tinyxml初体验
- w7 internet信息服务器,Win7安装IIS Internet信息服务步骤
- 什么是Trunk端口模式?此模式有何作用?
- BBU与RRU、RRH
- C语言简单实现世界协调时UTC与北京时间BJT转换
- 张邦鑫:组织文化 - 价值观打造方法论初步
- 高估问题以及解决方法
- 数据结构初阶之二叉树——概念篇