为什么mysql索引要使用B+树,而不是B树,红黑树

MySQL中的B+树索引(聚簇索引/聚集索引、辅助索引/二级索引、联合索引/复合索引、覆盖索引、回表)详解 聚集索引/聚簇索引--主键 所有的数据辅助索引/二级索引--索引列—+主键。查看其他列–>回表(聚集索引/聚簇索引联合索引/复合索引--(多个列+主键)->覆盖索引(不是索引) 阅读详情

我们在MySQL中的数据一般是放在磁盘中的,读取数据的时候肯定会有访问磁盘的操作,磁盘中有两个机械运动的部分,分别是盘片旋转和磁臂移动。盘片旋转就是我们市面上所提到的多少转每分钟,而磁盘移动则是在盘片旋转到指定位置以后,移动磁臂后开始进行数据的读写。那么这就存在一个定位到磁盘中的块的过程,而定位是磁盘的存取中花费时间比较大的一块,毕竟机械运动花费的时候要远远大于电子运动的时间。当大规模数据存储到磁盘中的时候,显然定位是一个非常花费时间的过程,但是我们可以通过B树进行优化,提高磁盘读取时定位的效率。

为什么B类树可以进行优化呢?我们可以根据B类树的特点,构造一个多阶的B类树,然后在尽量多的在结点上存储相关的信息,保证层数(树的高度)尽量的少,以便后面我们可以更快的找到信息,磁盘的I/O操作也少一些,而且B类树是平衡树,每个结点到叶子结点的高度都是相同,这也保证了每个查询是稳定的。

特别地:只有B-树和B+树,这里的B-树是叫B树,不是B减树。没有B减树的。

以下摘自【程序员小灰】

什么是B树

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

1、根结点至少有两个子女。 2、每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m 3、每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m 4、所有的叶子结点都位于同一层。5、每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。

下面以3阶B树开始学习

这棵树中,重点看(2,6)节点。该节点有两个元素2和6,又有三个孩子1,(3,5),8。其中1小于元素2,(3,5)在(2,6)之间,8大于(3,5),正好符合上面所列的特征。

B树查询的流程:

比如上面的3阶B树查询数值5。

第1次IO:

第2次IO:

第3次IO:

第3次内存比较:

总结:每次深度加1就会进行一次磁盘IO的查询,将当前高度的数据加到内存中,再进行数值比较。从中可以看出相比大部分的查询时间是花费在磁盘IO的速度上,所以要想提高性能就是将树的高度足够低,IO次数足够少,这就是B树的优势。

B树添加的流程:

比如树里添加数值4 自顶向下查找4的节点位置,发现4应当插入到节点元素3,5之间

节点3,5已经是两元素节点,无法再增加。父亲节点 2, 6 也是两元素节点,也无法再增加。根节点9是单元素节点,可以升级为两元素节点。于是拆分节点3,5与节点2,6,让根节点9升级为两元素节点4,9。节点6独立为根节点的第二个孩子。

从图中可以看到,为了插入一个元素,几乎全部的位置都变化了,这就是B树的自平衡(始终维持多路平衡)。

B树删除的流程:

自顶向下查找元素11的节点位置。

删除11后,节点12只有一个孩子,不符合B树规范。因此找出12,13,15三个节点的中位数13,取代节点12,而节点12自身下移成为第一个孩子。(这个过程称为左旋)

B树应用

主要用于文件系统以及部分数据库索引(MongoDB) 而Mysql是用B+树的。

什么是B+树

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

1、有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。 2、所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。 3、所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。

从上图可以发现每一个父节点的元素都出现在子节点中,并且是子节点的最大(或最小)

从图中可以看到根节点元素8是字节点2,5,8的最大元素,也是叶子节点6,8的最大元素。根节点15是子节点11,15的最大元素,也是叶子节点13,15的最大元素。

B+树的最大元素始终位于根节点当中。所有叶子节点包含了全量元素信息,并且每一个叶子节点都带有指向 下一个节点指针,形成了一个有序链表。

B+树查询流程

单个查询:查询某个元素3

第一次磁盘IO:

第二次磁盘IO:

第三次磁盘IO:

这样看起来跟B树没有什么区别。但其实有两点是需要注意的:

1、B+树的中间节点没有卫星数据的。所以同样大小的磁盘页可以容纳更多的节点元素。(这就意味着B+会更加矮胖,查询的IO次数会更少)

B树的卫星数据

B+树的卫星数据

2、B树查找性能是不稳定的(如果要查找的数据分别在根节点和叶子节点,他们的性能就会不同)。但B+树的每一次都是稳定的,为啥呢,看下面的范围查询。

范围查询:查找到范围的下限(3)

B树的范围查询:

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

中序遍历到元素6:

中序遍历到元素8:

中序遍历到元素9:

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

B+树的范围查询:

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

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

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

从上面的流程比较,可以得出以下B+树的优势:

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

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

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

面试题

问题1:MySQL中存储索引用到的数据结构是B+树,B+树的查询时间跟树的高度有关,是log(n),如果用hash存储,那么查询时间是O(1)。既然hash比B+树更快,为什么mysql用B+树来存储索引呢?

答:一、从内存角度上说,数据库中的索引一般时在磁盘上,数据量大的情况可能无法一次性装入内存,B+树的设计可以允许数据分批加载。

二、从业务场景上说,如果只选择一个数据那确实是hash更快,但是数据库中经常会选中多条这时候由于B+树索引有序,并且又有链表相连,它的查询效率比hash就快很多了。

问题2:为什么不用红黑树或者二叉排序树?

答:树的查询时间跟树的高度有关,B+树是一棵多路搜索树可以降低树的高度,提高查找效率

问题3:既然增加树的路数可以降低树的高度,那么无限增加树的路数是不是可以有最优的查找效率?

答:这样会形成一个有序数组,文件系统和数据库的索引都是存在硬盘上的,并且如果数据量大的话,不一定能一次性加载到内存中。有序数组没法一次性加载进内存,这时候B+树的多路存储威力就出来了,可以每次加载B+树的一个结点,然后一步步往下找,

问题4:在内存中,红黑树比B树更优,但是涉及到磁盘操作B树就更优了,那么你能讲讲B+树吗?

B+树是在B树的基础上进行改造,它的数据都在叶子结点,同时叶子结点之间还加了指针形成链表。

下面是一个4路B+树,它的数据都在叶子结点,并且有链表相连。

问题5:为什么B+树要这样设计?

答:这个跟它的使用场景有关,B+树在数据库的索引中用得比较多,数据库中select数据,不一定只选一条,很多时候会选中多条,比如按照id进行排序后选100条。如果是多条的话,B+树需要做局部的中序遍历,可能要跨层访问。而B+树由于所有数据都在叶子结点不用跨层,同时由于有链表结构,只需要找到首尾,通过链表就能把所有数据取出来了。

比如选出7到19只需要在叶子结点中就能找到。

 

 

数据库索引为什么要用 B+ 树而不用红黑树呢?

AVL 树和红黑树这些二叉树结构的数据结构可以达到最高的查询效率这是毋庸置疑的。

既然如此,那么数据库索引为什么不用 AVL 树或者红黑树呢?

这就牵扯到一个问题了,不考虑每种数据结构的前提条件而选择数据结构都是在耍流氓。

AVL 数和红黑树基本都是存储在内存中才会使用的数据结构,那磁盘中会有什么不同呢?

这就要牵扯到磁盘的存储原理了

操作系统读写磁盘的基本单位是扇区,而文件系统的基本单位是簇(Cluster)。

也就是说,磁盘读写有一个最少内容的限制,即使我们只需要这个簇上的一个字节的内容,我们也要含着泪把一整个簇上的内容读完。

那么,现在问题就来了

一个父节点只有 2 个子节点,并不能填满一个簇上的所有内容啊?那多余的内容岂不是要浪费了?我们怎么才能把浪费的这部分内容利用起来呢?哈哈,答案就是 B+ 树。

由于 B+ 树分支比二叉树更多,所以相同数量的内容,B+ 树的深度更浅,深度代表什么?代表磁盘 io 次数啊!数据库设计的时候 B+ 树有多少个分支都是按照磁盘一个簇上最多能放多少节点设计的啊!

所以,涉及到磁盘上查询的数据结构,一般都用 B+ 树啦。

阿里三面:你跟我讲讲MySQL的B+树 大家好,我是小林。 大家背八股文的时候,都知道 MySQL 里 InnoDB 存储引擎是采用 B+ 是来组织数据的。 这点没错,但是大家知道 B+ 树里的节点里存放的是什么呢?查询数据的过程又是怎样的? 这次,我们从数据页的角度看 B+ 树,看看每个节点长啥样。 InnoDB 是如何存储数据的? MySQL 支持多种存储引擎,不同的存储引擎,存储数据的方式也是不同的,我们最常使用的是 InnoDB 存储引擎,所以就跟大家图解下InnoDB 是如何存储数据的。 记录是按照行来存储的,但是数 阅读详情

相关推荐

MySQL索引为什么使用B+树,而不用二叉树、红黑树、哈希表、B树?

索引是帮助MySQL高效获取数据的排好序的数据结构。 索引数据结构: 1.二叉树2.红黑树3.Hash表4.B-Tree。

折叠伞的博客 2592

MySQL 索引结构用B+树的原因

MySQL 的基本存储结构是页(记录都存在页里边): 各个数据页可以组成一个双向链表 每个数据页中的记录又可以组成一个单向链表 每个数据页都会为存储在它里边的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录。 所以说,如果写select * from tab where name = 'xxx'这样没有进行任何优化的 sql 语句,默认会这样做: 定位到记录所在的页:需要遍历双向链表,找到所在的页。 从所在

ChineseSoftware的博客 3387

【MySQL】MySQL索引为何使用B+树结构,而不是二叉树、红黑树、B树?

本章节我们主要来聊聊 MySQL索引为何使用B+树结构,而不是二叉树、红黑树、B树?MysQL的索引机制中,有一点可谓是路人皆知,既默认使用B+树作为底层的数据结构。有人会说树结构是以二分法查找数据,所以会在很大程度上提升检索性能,这点确实没错,但树结构有那么多,但为什么要选择B+树呢?而不选择二叉树、红黑树或B树呢?下面一起聊一聊这个话题。

九师兄 791

索引的底层数据结构为什么使用B+树?

1.常见的索引结构有: B 树, B+树和 Hash,所针对的引擎是不同的。 2.为了提升查询的效率,要尽可能少的从磁盘中读取数据 3.同时要保证读取的数据足够有效,所以要分块读取 4.磁盘跟内存进行交互的时候,是以页为单位的,在进行数据读取的时候,一般都是读取的页的整数倍,innodb存储引擎默认读取的是16kb的数据 5.这时候,考虑使用树结构,二叉树,AVL,红黑树都有一个问题,树的分支只有两个,想要往这些树中结构插入更多的数据时,树的结构变得更深,导致次数变多,查询效率下降 6.基于此,考

weixin_45912909的博客 616

用SPSS做信效度分析

对问卷进行Cronbach’s Alpha信度检验。如果此值高于0.8,则说明信度高;如果此值介于0.7-0.8之间,则说明信度较好;如果此值介于0.6~0.7,则说明信度可接受;如果此值小于0.6,说明信度不佳。下面利用SPSS进行分析,点击分析–标度–可靠性分析选项,选中所要分析的问卷数据或题目。得到结果,我们要看这个有用的结果,当克隆巴赫Alpha系数(也可以看标准化后的)大于0.8时候,说明问卷信度较高。

小高~的博客 1万+

用deepseek部署全自动的机器人--bytebot

Bytebot是一款开源AI桌面代理,提供完整的虚拟桌面环境,支持跨应用任务处理、文件管理、文档处理等复杂工作流。其技术架构包含核心控制、LLM代理、UI等组件,支持Docker和Kubernetes部署。本文演示了基于CloudStudio的部署流程,包括环境配置、Docker部署及DeepSeek API集成,实现多模型调用功能。

Kin 2471

Mysql为什么选择B+树作为索引结构,而不是红黑树

Mysql为什么选择B+树作为索引结构,而不是红黑树,它的优势在哪里

猫轻王的博客 2259

SAP ABAP实战:用BAPI_PO_CREATE1创建采购订单时,如何巧妙处理PBXX和PB00条件类型?

本文深入探讨了在SAP ABAP开发中使用BAPI_PO_CREATE1创建采购订单时,如何有效处理PBXX和PB00条件类型的难题。通过分析外协加工订单的特殊需求,提供了从问题定位到解决方案的全流程方法,包括数据流向追踪、字段控制策略和增强实现方案,帮助开发者解决条件类型自动生成的业务痛点。

weixin_30614109的博客 814

MySQL的索引为什么是B+树而不是B树或红黑树

MySQL的索引为什么是B+树,而不是B树或者红黑树 一、为什么不是B树? 1、B+树的中间节点没有卫星数据的。所以同样大小的磁盘页可以容纳更多的节点元素。(这就意味着B+会更加矮胖,查询的IO次数会更少) B树的卫星数据 B+树的卫星数据 2、B树查找性能是不稳定的(如果要查找的数据分别在根节点和叶子节点,他们的性能就会不同)。但B+树的每一次都是稳定的,为啥呢,看下面的范围查询。 B+树相对于B树的优势: 1.单一节点存储更多的元素,使得查询的IO次数更少。 2.所有查询都要查找到叶子节点,查询性能

Quan的博客 1763

Open3D:读写点云与可视化(C++)

迭代 //Open3D #include "Open3D/Open3D.h" //Eigen #include "Eigen/Dense" void testOpen3D::xjGetInformation(const QString &pcPath) { /* read PC */ auto cloud_ptr = std::make_shared<open3d::geometry::PointCloud>(); if (!open3d::io::ReadPointCl

累了就要打游戏 1万+

从Raw图像到超分辨率:真实场景下的图像增强全流程指南

通过本文的学习,您已掌握了利用Raw图像实现真实场景超分辨率的完整技术链——从数据生成的“真实感模拟”,到双分支CNN的“细节+色彩”协同建模,再到模型的训练与落地。本文将带您从理论到实践,掌握利用Raw图像实现真实场景超分辨率的核心技术,让您的图像在细节和色彩上都能“更上一层楼”。是相机传感器直接输出的原始数据,保留了最完整的亮度、色彩信息(如Bayer阵列的原始采样),这为超分辨率提供了“富矿级”的信息基础。该分支以低分辨率RGB图像为参考,学习“色彩变换矩阵”,让恢复的细节拥有真实的色彩表现。

FJN110的博客 133

为什么 MySQL 索引用的是 B+ 树而不是红黑树?

MySQL索引选择B+树而非红黑树的主要原因是:B+树更适合数据库场景的需求。红黑树虽然查询效率高(O(log n)),但树高较大导致磁盘IO次数多,且不支持高效范围查询。而B+树通过多叉结构显著降低树高(百万数据仅3层),叶子节点链表实现快速范围扫描,并充分利用磁盘预读特性。此外,B+树的节点分裂合并操作比红黑树的旋转调整更高效。因此,B+树在减少IO次数、支持范围查询和适配磁盘存储等方面具有明显优势,成为数据库索引的最佳选择。

weixin_45422672的博客 578

Vue3 - 详细实现安装西瓜视频 xgplayer 插件详细配置及使用教程,利用西瓜视频播放器播放 mp4、flv、hls 格式视频文件及视频推流(直播或监控摄像头画面),支持移动端H5及PC网站!

vue3,nuxt3,西瓜视频,xgplayer,插件组件,xgplayer-hls,xgplayer-flv,xgplayer-mp4,播放视频点播和直播视频流,监控实时播放推流,倍速播放,在线flv在线推流地址,HLS播放,vue3西瓜播放器,vue如何使用西瓜视频插件做直播推流回流,视频点播,flv在线视频流播放,截图功能,自定义播放器样式,截屏,监控视频,vue3使用西瓜播放器播放flv、hls、mp4视频,截屏按钮,直播流,报错,黑屏,加载失败,苹果ios不兼容,重连,怎么改样式,很卡,详细教程,

🏆 前端领域优质创作者 1万+

mysql索引为什么不用红黑树_为什么MySQL索引要使用B+树,而不是B树,红黑树

我们在MySQL中的数据一般是放在磁盘中的,读取数据的时候肯定会有访问磁盘的操作,磁盘中有两个机械运动的部分,分别是盘片旋转和磁臂移动。盘片旋转就是我们市面上所提到的多少转每分钟,而磁盘移动则是在盘片旋转到指定位置以后,移动磁臂后开始进行数据的读写。那么这就存在一个定位到磁盘中的块的过程,而定位是磁盘的存取中花费时间比较大的一块,毕竟机械运动花费的时候要远远大于电子运动的时间。当大规模数据存储到磁...

weixin_32109109的博客 1703

2021年03月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

给定一个十进制正整数n(0 < n < 1000000000),每个数位上数字均不为0。n的位数为m。现在从m位中删除k位(0

人生就是一个不断学习的过程 997

YOLOv11 损失函数进阶:Varifocal Loss 让正负样本精度双升

创建self.alpha = alpha # 正样本权重系数self.gamma = gamma # 聚焦系数self.lambda_reg = lambda_reg # 回归损失权重# 分类损失:Varifocal Classification Loss# 正样本权重:基于预测置信度# 计算 BCE 损失并加权cls_loss = cls_loss.sum() / (cls_true.sum() + 1e-6) # 按正样本数归一化。

m0_71589036的博客 435

【大话Mysql面试】-Mysql的索引为什么要使用B+树,而不是B树,红黑树等之类?

Mysql的索引为什么要使用B+树,而不是B树,红黑树等之类? 在Mysql中,无论是Innodb还是MyISAM引擎,都使用了B+树做索引结构(这里先不考虑Hash索引)。那么我们从最普通的二叉树开始,从而说明Mysql为什么选择B+树作为索引结构。 一、二叉查找树 二叉查找树(BST,binary search Tree)也叫二叉排序树,在二叉树的基础上满足:任意结点的左子树上的所有结点值不大于根节点的值,任意结点的右子树上所有结点值不小于根节点的值。 但如果采用二叉查找树作为索引,并且把id作为索引且

Mind_programmonkey的博客 3900

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

mysql底层为啥用b 树不用红黑树_为什么mysql索引要使用B+树,而不是B树,红黑树...

我们在MySQL中的数据一般是放在磁盘中的,读取数据的时候肯定会有访问磁盘的操作,磁盘中有两个机械运动的部分,分别是盘片旋转和磁臂移动。盘片旋转就是我们市面上所提到的多少转每分钟,而磁盘移动则是在盘片旋转到指定位置以后,移动磁臂后开始进行数据的读写。那么这就存在一个定位到磁盘中的块的过程,而定位是磁盘的存取中花费时间比较大的一块,毕竟机械运动花费的时候要远远大于电子运动的时间。当大规模数据存储到磁...

weixin_36230515的博客 1134

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

红黑树的优势_为什么mysql索引要使用B+树,而不是B树,红黑树

我们在MySQL中的数据一般是放在磁盘中的,读取数据的时候肯定会有访问磁盘的操作,磁盘中有两个机械运动的部分,分别是盘片旋转和磁臂移动。盘片旋转就是我们市面上所提到的多少转每分钟,而磁盘移动则是在盘片旋转到指定位置以后,移动磁臂后开始进行数据的读写。那么这就存在一个定位到磁盘中的块的过程,而定位是磁盘的存取中花费时间比较大的一块,毕竟机械运动花费的时候要远远大于电子运动的时间。当大规模数据存储到磁...

weixin_28939623的博客 375

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

b树与b+树的区别_为什么mysql索引要使用B+树,而不是B树,红黑树

我们在MySQL中的数据一般是放在磁盘中的,读取数据的时候肯定会有访问磁盘的操作,磁盘中有两个机械运动的部分,分别是盘片旋转和磁臂移动。盘片旋转就是我们市面上所提到的多少转每分钟,而磁盘移动则是在盘片旋转到指定位置以后,移动磁臂后开始进行数据的读写。那么这就存在一个定位到磁盘中的块的过程,而定位是磁盘的存取中花费时间比较大的一块,毕竟机械运动花费的时候要远远大于电子运动的时间。当大规模数...

weixin_39556474的博客 657

mysql b树优缺点_为什么mysql索引要使用B+树,而不是B树,红黑树

我们在MySQL中的数据一般是放在磁盘中的,读取数据的时候肯定会有访问磁盘的操作,磁盘中有两个机械运动的部分,分别是盘片旋转和磁臂移动。盘片旋转就是我们市面上所提到的多少转每分钟,而磁盘移动则是在盘片旋转到指定位置以后,移动磁臂后开始进行数据的读写。那么这就存在一个定位到磁盘中的块的过程,而定位是磁盘的存取中花费时间比较大的一块,毕竟机械运动花费的时候要远远大于电子运动的时间。当大规模数据存储到磁...

weixin_34596012的博客 597

MySQL索引为什么选择B+树,而不是二叉树、红黑树、B树?

MySQL索引为什么选择B+树,而不是二叉树、红黑树、B树?

wodetongnian的专栏 1070

mysql索引原理------为什么mysql索引要选择B+树这种数据结构,而不是二叉树,红黑树,B树?

为什么mysql索引要选择B+树这种数据结构,而不是二叉树,红黑树,B树? 首先我们看看二叉树的结构 图片上可以明显看到树的高度是6,如果我们要查询6这个元素的话我们要进行6次查询,这显然不满足实际开发得需求。 然后是红黑树,红黑树是一棵平衡二叉树 可以明显的看到同样的元素,在红黑树的存储的高度比二叉树要低,红黑树会同股哟左旋右旋的操作来减少树的高度,从而到达减少我们查询树种元素的次数来提高查...

我怀念的 1919

Mysql数据库的底层索引,为什么采用B+树而不是二叉树和红黑树?

平衡多路查找树B Tree : B-Tree是为磁盘等外存储设备设计的一种平衡查找树。系统从磁盘读取数据到内存时是以磁盘块(block)为基本单位的,位于同一个磁盘块中的数据会被一次性读取到内存中。在Mysql存储引擎中有页(Page)的概念,页是其磁盘管理的最小单位。Mysql存储引擎中默认每个页的大小为16KB,因此Mysql每次申请磁盘空间时都会 将若干地址连续磁盘块来达到页的大小16KB。Mysql在把磁盘数据读入到磁盘时会以页为基本单位, 在查询数据时如果一个页中的每条数据都能有助于定位数据记录

一蓑烟雨任平生 1852

mysql底层原理为什么是B+树做索引,为什么不是平衡二叉树,红黑树(大场面试题)

平衡二叉树 1.非叶子节点最多拥有两个子节点。 2.非叶子节值大于左边子节点、小于右边子节点。 3.树的左右两边的层级数相差不会大于1。 4.没有值相等重复的节点。 B树 B-树和平衡二叉树稍有不同的是B-树属于多叉树又名平衡多路查找树(查找路径不只两个) 1.在一个节点中,存放着数据(包括key和data)以及指针,且相互间隔。 2.同一个节点,key增序。 3.一个节点最左边的指针不为空,则它指定的节点左右的key小于最左边的key。右边同理。中间的指针指向的节点的key位于相邻两

巅锋时刻521 1273
上一篇: Mysql索引类型Btree和Hash的区别以及使用场景
下一篇: 从 i++ 和 ++i 说起局部变量表和操作数栈
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值