为什么MySQL 要选择 B+树

Mysql索引结构全维度比较 前言 在MySQL中,无论是Innodb还是MyIsam,都使用了B+树作索引结构(这里不考虑hash等其他索引)。本文将从最普通的二叉查找树开始,逐步说明各种树解决的问题以及面临的新问题,从而说明MySQL为什么选择B+树作为索引结构。 一、二叉查找树(BST):不平衡 二叉查找树(BST,Binary Search Tree),也叫二叉排序树,在二叉树的基础上需要满足:任意节点的左子树上所有节... 阅读详情

一、什么是索引

在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构。再直白点就是我们可以把索引理解成图书或者字典的目录。

既然索引是数据的一种存储结构,那么我们必然要对其进行存储,同时,建立索引的目的就是为了加快查询速度,所以必然要选择一种可以高效查询的数据结构来进行存储,而 MySQL 选择了什么数据结构来存储索引呢?

二、二分查找法

在日常开发中,我们经常使用链表或者数组来存储数据,而如果按顺序架构数据存入数组,查找数据时我们就可以可用二分查找法来实现高效查询(注意:因为链表的空间是不连续的,所以不能使用二分查找法)。

二分查找法:Binary Search,也称折半查找法,是一种效率较高的查找方法。比如有 1-10 十个数,现在需要找到 8,先从中间开始找 5,然后发现 8 比 5 大,可以把 5 左边的数排除掉,剩下 6-10,再从中间开始找,依次类推,直到找到 8 为止。

二分查找法有一个前提是数据必须是有序的,存储数据的空间必须是连续的(只有连续的空间才可以通过下标计算出指定数据的位置),这种数据存储一般属于链式存储,我们一但要插入或者修改一个数据,可能会伴随着大量的下标移动,比如我们把 1-10 放在数组里面,下标分别对应 0-9,然后现在要插入一个 0,为了保证有序,0 必须排在第一位,那么 1-10 所有的数据下标都要往后移动一位,这会严重影响到写入性能,所以数组并不适合用来存储索引。

三、二叉树

分查找法是一种效率相对较高的查询方式,但是其有较多的局限性且并不适合于频繁修改的场景,为了解决二分查找的局限和缺陷,有人发明了一种新的数据结构:树。而二叉树又是树中最基本的一种数据结构。

二叉查找树简称二叉树(BST),英文全称:Binary Search Tree,这是一种什么样的数据结构呢?

下图所示就是一棵二叉树:
在这里插入图片描述

在上面这个二叉树中,我们要找到 8,先从根节点 6 开始比较,发现 8 比 6 大,继续往右边的子节点查找,这时就可以找到 8。

二叉树有两个特点:

  • 左子树所有的节点都小于父节点。

  • 右子树所有的节点都大于父节点(这就是上面为什么发现 6 小于当前需要查找节点时需要继续往右边寻找的原因)。

根据上面这棵二叉树,我们可以发现,二叉树的查询效率和这棵树的深度是相关的。因为在实际应用中,每次获取一个节点可能就说明进行了一次磁盘 IO 操作,树越深,需要的 IO 次数可能就会越多,从而查询速度就越慢,在最坏的情况下时间复杂度会退化成 O(n),这时候二叉树就会退化成一个链表,如下图所示:

在这里插入图片描述
当二叉树退化成链表之后,这时候的查询效率就会非常低,只能一个个遍历列表中的元素,直到找到需要的节点。

四、平衡二叉树

二叉树退化成链表之后就表明这棵树只有右子节点或者只有左子节点,也就是说左右节点不平衡,那么这时候就有人想办法采用特定算法让二叉树平衡一点,这就是平衡二叉树。

平衡二叉树,英文全名叫做:Balanced binary search trees,简称 AVL 树,这个 AVL 并不是英文名的简称,而是发明者(G. M. Adelson-Velsky 和 E. M. Landis)两个人的人名缩写。

平衡二叉树的特点就是:左右子树深度差绝对值不能超过 1,一旦超过 1 就会通过特定算法来发生左旋或者右旋操作,以此来保证这颗树的平衡性,避免出现普通二叉树的极端情况下退化成为链表的情况。

有了平衡二叉树,似乎是解决了上面提到的问题,那么我们是不是可以选择平衡二叉树来存储索引呢?然而实际上 MySQL 中的索引并不是采用平衡二叉树来进行存储的,这是为什么呢?

索引需要存储哪些信息

在回答这个问题之前,我们需要了解一下,索引到底需要存储什么?

为了达到数据检索效果,一个索引至少应该包含以下三部分的信息:

  1. 索引值:就是表里面索引列对应的值,因为我们查询就是通过索引值来查询的,所以索引值必然要存储。

  2. 数据的磁盘地址(通过磁盘地址找到当前数据)或者直接存储整条数据:通过索引搜索的目的其实是需要找到当前对应的整条数据,所以必然需要存储地址或者数据

  3. 子节点的地址:任何时候查询都是从根节点开始的,当发现根节点的数据并不是我们想要的数据,我们需要继续往下查询,所以需要知道当前根节点中所有子节点的引用地址。

有了上面的三部分存储信息,我们可以得到下面的一个索引存储简图:
在这里插入图片描述上图中,每个节点中黄色区域就表示索引值,紫红色区域(中间部分)表示当前索引值对应的数据磁盘地址,通过这个地址可以直接获取整条数据,最下面蓝色的左、右存储了子节点的地址。

InnoDB 索引结构

在 InnoDB 存储引擎中,页(Page)是用于管理数据的最小磁盘单位,页的默认大小为 16KB(不同版本会有差异)。而这个页也就是对应了上图中的每一个节点,每查询一次节点就需要进行一次 IO 操作。

那么问题就来了,上图中,AVL 树一个节点上只存了一个关键字(索引值)+ 一个磁盘地址+ 左右节点的引用,这几个信息加起来占用了多大空间,我们可以来算一下:

  • 索引关键字:假设是采用 32 位的 uuid 进行存储,那么就是占了 32 个字节。

  • 数据磁盘地址:这一块其实在 InnoDB 中采用的是 8 个字节进行存储。

  • 子节点的引用地址:假设有 2 个子节点,那么这一块也是占用了 8 * 2 字节。

上面三部分内容加起来总共是 56 个字节,而 16kb 有多少个字节呢?答案是 16384 个字节。

所以如果采用平衡二叉树来存储索引的话,我们一个节点存储的内容是远远小于 16kb,这样看来,一个节点只存储一个关键字,浪费了大量的空间。

而且因为二叉树只有两路,数据量一上来,整颗树就会变得非常深,这也会很影响查询性能,所以我们需要做的就是将一棵“瘦高”的树变成“矮胖”的树。

将一棵“瘦高”的树变成“矮胖”的树最简单的办法就是将路数变多,也就是让一个节点存储更多的关键字。

五、红黑树

与AVL树相比,红黑树并不追求严格的平衡,而是大致的平衡。但红黑树的查询效率会有所下降,这是因为树的平衡性变差,高度更高。但红黑树的删除效率大大提高了,因为红黑树同时引入了颜色,当插入或删除数据时,只需要进行O(1)次数的旋转以及变色就能保证基本的平衡,不需要像AVL树进行O(lgn)次数的旋转。

因此,在实际应用中,AVL树的使用相对较少,而红黑树的使用非常广泛。例如,Java中的TreeMap使用红黑树存储排序键值对;Java8中的HashMap使用链表+红黑树解决哈希冲突问题(当冲突节点较少时,使用链表,当冲突节点较多时,使用红黑树)。

对于数据在内存中的情况(如上述的TreeMap和HashMap),红黑树的表现是非常优异的。但是对于数据在磁盘等辅助存储设备中的情况(如MySQL等数据库),红黑树并不擅长,因为红黑树长得还是太高了。当数据在磁盘中时,磁盘IO会成为最大的性能瓶颈,设计的目标应该是尽量减少IO次数;而树的高度越高,增删改查所需要的IO次数也越多,会严重影响性能。

六、多路平衡树(B 树)

B 树有一个特点就是:分叉数(路数)永远比关键字数多 1。

如下图就是一棵简易的 B 树示意图(白色框表示路数,蓝色框表示索引值)
在这里插入图片描述可以看到这棵树的中间一层,存储了两个关键字,所以其下一层就有了三个子节点,所以关键字存储越多,路数越多,同样深度的树就能存储更多的数据。

多路平衡树解决了二叉树和平衡二叉树的问题,目前看起来性能应该不错,但是 MySQL 依然没有选择 B 树来存储索引,原因我们后面解释,我们先来看看 B 树的升级版本:B+ 树。

七、B+ 树

下图是一棵 B+ 树的存储数据示意图:
在这里插入图片描述

对比 B 树,其实 B+ 树有一个非常明显的特点,那就是最后一层的叶子节点会有指向下一个节点的指针,从而形成了一个有序链表。

在 InnoDB 中,B+ 树有以下特点:

  • B+ 树的关键字的数量是跟路数相等的。

  • B+ 树的根节点和枝节点中都不会存储数据,只有叶子节点才存储数据。而搜索到关键字也不会直接返回,也仍然会到最后一层的叶子节点。

  • B+ 树的每个叶子节点增加了一个指向相邻叶子节点的指针,它的最后一个数据会指向下一个叶子节点的第一个数据,形成了一个有序链表的结构。

八、为什么要选择 B+ 树

B+ 树本身是由 B 树改进而来的,所以 B 树能解决的问题,B+ 树都能解决,而且 B+ 树相比较 B 树更有以下优势:

  • 扫库、扫表能力更强:如果我们要对表进行全表扫描,只需要遍历叶子节点就可以了,不需要遍历整棵 B+ 树,因为其数据只存储在叶子节点。

  • B+ 树的磁盘读写能力相对于 B 树来说更强: B+ 树的根节点和枝节点不保存数据,所以一个节点可以保存更多的关键字,一次磁盘加载(即一次 IO 操作)能获取到相对更多的关键字。

  • 天然具备排序能力:叶子节点上有下一个数据区的指针,数据形成了链表。

  • 效率稳定:B+ 树永远是在叶子节点拿到数据,所以 IO 次数是稳定的,而 B树运气好根节点就拿到数据,运气不好就要到叶子节点才能拿到数据,所花费的时间会有差异。

为什么 MongoDB 索引选择B树,而 Mysql 选择B+树 前言 之前有人看了我的博客提出了这个问题,我懒省事让他自行百度,今天发现网上的答案很多,但是很啰嗦或者让人看不懂,所以就写下了这篇文章 一、B树和B+树的区别 很明显,我们要想弄清楚原因就要知道B树和B+树的区别。为了不长篇大论。我们直接给出他们的形式总结他们的特点。 1、B树 B树是一种自平衡的搜索树,形式很简单: 这就是一颗B树。针对我们这个问题的最核心的特点如下: (1)多路,非二叉树 (... 阅读详情

相关推荐

BEVFormer详解

BEVFormer 是将Transformer架构的自注意机制与BEV视图中3D检测结合起来的一种纯视觉目标检测方案。对于纯视觉的BEV检测方案,其中的重中之重就是如何将2D的图像特征映射到3D空间的BEV栅格,既然是映射关系,那就有前行投影和反向查询两种机制。前向投影是基于深度估计的方法,参考基于深度估计的BEV视图转换方法,典型代表为LSS。反向查询方法思路为先将BEV栅格在Z方向上进行lift提升,然后再映射到图像特征图上进行特征查询。BEVFormer 就是基于这种机制进行2D图像特征到3D空间的B

MAX的专栏 4733

mysql为什么使用b+树

MySQL 使用 B 树有以下几个原因: 查询效率高:B 树的查询时间复杂度是 log(n) 级别的,相比链表和二叉树的 O(n),性能要高得多。 支持范围查询:B 树能够支持范围查询,这在 MySQL 中经常用于 WHERE 子句中的 BETWEEN 和 IN 运算符。 支持索引和排序:B 树可以用来实现索引,而且在查询时能够保证结果的有序性。 支持动态扩展:B 树可以动态地向两侧扩展,...

weixin_42588555的博客 2075

HMC5883L磁力计驱动开发:I²C通信、校准与FreeRTOS集成

磁力计是惯性导航与电子罗盘系统的核心传感器,其输出原始磁场数据需经精确采集、单位换算与误差补偿才能用于姿态解算。基于各向异性磁阻(AMR)原理的三轴磁力计,如HMC5883L,依赖稳定I²C通信获取12位有符号磁场采样值,并通过增益配置、硬软铁校准及温度补偿提升物理量精度。在嵌入式实时系统中,驱动层须保障数据的时间一致性与抗干扰鲁棒性,避免总线挂死、字节错位或量程误配等典型问题。本文围绕HMC5883L这一广泛使用的停产但仍在产线服役的磁传感器,详解寄存器配置、定点单位转换、八方位校准算法及FreeRTOS

weixin_42594427的博客 142

mysql为什么要用b+树

mysql为什么要用b+树

qq_40263124的博客 6229

解决 python2.7中 ImportError: No module named Crypto.Signature

我的解决办法,先查看有没有安装 pip,直接执行pip 回车 没有出现null什么的就安装了,如果没有安装去其他博客哪里看一下,正常情况是默认就有的,然后使用。发现我自己也不会啊,就百度看看,想着网上的解决方法一大片,但是都是废话,能用的没有几个,而且能安装的没有几个。这个里面的python2、3就是系统里面的python版本,直接跟我这样就可以了除非版本不一样,也就是没有这个版本。就可以使用了,第一个应该是卸载之前的,然后重新安装,我的就是这样解决的。就比如我的,我现在使用的 python2.7。

记录一下 1606

变焦跟踪理论基础(如何在变焦过程中保持清晰)

如何在整个变焦过程中一直保持图像的清晰度或焦点是变焦跟踪的主要挑战。 当用户在缩放跟踪的情况下改变缩放时,设备保持对焦。 然而,在没有变焦跟踪的情况下,图像变得失焦,图像在变焦跟踪后由于自动对焦(AF)算法才最终对焦。...................................................

ChenYX的博客 20万+

MySQL的索引结构为什么是B+树?

博客主页:🏆看看是李XX还是李歘歘🏆 🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺 💗点关注不迷路,总有一些📖知识点📖是你想要的💗 ⛽️今天的内容是 MySQL的索引结构为什么是B+树? ⛽️💻💻💻 先来看一下树的演化: 树:非线性结构,每个节点有唯一的一个父结点和多个子结点(子树),为一对多的关系。 二叉树:每个结点最多有两颗子树,并且子树有左右之分,不能颠倒。 满二叉树:每一层的结点个数都达到了当层能达到的最大结点数。 完全二叉树:除了最...

分享包括但不限于计算机基础知识、数据结构与算法、Golang技术栈。年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐,将复何及! 5972

手把手教你用GEM-2多频电磁仪找地下管道(附真实数据图)

本文详细解析了使用GEM-2多频电磁仪精准定位地下管线的全流程,包括设备调试、频率选择、现场扫描技巧及数据解读。通过真实案例展示了如何应对复杂干扰环境,提升管线检测效率与准确性,特别适合市政工程和地下管线普查。

weixin_42565652的博客 393

MySQL为什么使用B+树,而不是B树?

在MySQL中,B+树被广泛应用于索引结构,因为它支持高效的范围查询和区间扫描,并且有助于减少磁盘I/O操作,从而提高查询效率。B+树相对于B树来说,其内部节点只存储键值信息,而不存储数据信息,这样可以让每个节点能够存储更多的键值信息,从而使得查询同一层次的所有数据时,能够一次性读入更多的数据块,减少磁盘I/O操作。由于B+树的非叶子节点只存储键值信息,而不存储指向数据的指针,因此当进行范围查询时,只需要遍历B+树的叶子节点即可,而不需要遍历非叶子节点,大大加快了查询速度。

jkzyx123的博客 4688

【异常】API 速率限制报错问题全流程排查与解决指南 API rate limit reached. Please try again later.

摘要: 本文针对大模型API开发中常见的速率限制报错("API rate limit reached")提供全流程解决方案。首先解析该报错的本质是服务端对高频调用的保护机制,通过三步排查法确认根因:客户端请求频率超出账户阈值。提出三级解决方案:1)临时等待限流周期重置;2)升级付费账户提高调用配额;3)构建多模型容灾架构实现自动切换。建议生产环境优先采用容灾方案,通过备用API节点保障业务连续性,同时平衡不同模型服务的成本与性能。

奶爸的编程之路,也就一周冷个三天 1395

第六:Charles抓包-苹果手机抓包

【代码】第六:Charles抓包-苹果手机抓包。

欢迎来到本博客! 1649

mysql b树 io 读取_为什么 MongoDB 选择B树,Mysql 选择B+树?

本文献给准备面试或者是还在面试的你。常见面试题,送分题目,不拿白不拿。一、B树和B+树的区别很明显,我们想向弄清楚原因就要知道B树和B+树的区别。为了不长篇大论。我们直接给出他们的形式总结他们的特点。1、B树B树是一种自平衡的搜索树,形式很简单:这就是一棵B-树。针对我们这个问题的最核心的特点如下:(1)多路,非二叉树(2)每个节点既保存索引,又保存数据(3)搜索时相当于二分查找其他的基本上都是一...

weixin_33563262的博客 193

网络安全与黑客攻防常见设备:前置机、跳板机、堡垒机与肉鸡

前置机、跳板机、堡垒机和肉鸡,这些看似冷僻的技术名词,实则是网络安全与黑客攻防战中的关键角色。它们有的守护着企业的数字Pltform,保卫网络安全;有的则成为黑客的跳板,游走于灰色地带。

网络技术联盟站 946

MySQL为什么选择B+树

在我们日常开发中,MySQL 用得最多的存储引擎是 InnoDB,而它默认的索引结构就是B+树(B+Tree)。那么问题来了:✅ 为什么不是哈希表?✅ 为什么不是二叉树?✅ 为什么不是B树而偏偏是B+树?这篇文章,深入浅出MySQL 为什么选择了 B+树?指标是否满足?说明快速定位✅多叉树+低层级范围查询✅叶子节点链表遍历支持排序✅中序遍历天然有序IO友好✅每个节点可对应一个磁盘页插入删除效率✅平衡性强,节点分裂/合并机制成熟。

大西瓜的博客 1660

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

为什么MySQL会选择B+树作为索引

B+树通过减少磁盘I/O次数、支持高效的范围查询、提高空间利用率以及保持树的平衡,为MySQL提供了强大的索引支持,使其能够高效地处理大规模数据的存储和查询任务。在实际应用中,无论是InnoDB存储引擎、聚集索引与非聚集索引,还是分区表技术,B+树都发挥着不可或缺的作用。MySQL作为广泛使用的关系型数据库管理系统,其核心存储引擎InnoDB选择B+树作为其索引结构,这一选择背后蕴含了深刻的性能和存储效率考量。本文将简要介绍B+树的基本概念,阐述MySQL选择B+树的原因,并通过实际案例展示其应用。

德乐懿的博客 1121

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

mysql为什么选择B+树作为索引结构

mysql为什么选择B+树作为索引结构

m0_54258715的博客 1494

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

MySQL底层为什么选择用B+树作为索引

跳表底层实质就是可以进行二分查找的有序链表。而且在链表基础加上索引层。即能支持插入、删除等动态操作,也支持按区间高效查询。而且不管是查找、插入、删除对应的时间复杂度都是O(logn)。要理解跳表,先来看链表,假设链表存储是有序的数据,我们要想查询某一个数据,在最差的情况下要从头全遍历整个链表,时间复杂度是O(n)。从上图所示,我们如果要查询一个26的节点,跳表就可以先从索引层遍历,当遍历到在索引层的21节点,会发现下一个索引层的节点是36节点时,很明显要找的26的节点就在这区间。

qq_71416673的博客 1615

MySQL 为什么选择B+树作为底层数据结构

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

埃泽漫笔 1346

MySQL 索引为什么要选择 B+ 树

前言: 每天都在跟 mysql 打交道,你知道执行一条简单的 select 语句,都经历了哪些过程吗? 首先,mysql 主要是由 server 层和存储层两部分构成的。server 层主要包括连接器、查询缓存,分析器、优化器、执行器。存储层主要是用来存储和查询数据的,常用的存储引擎有 InnoDB、MyISAM,MySQL 5.5.5 版本后使用 InnoDB 作为默认存储引擎。 连接器 ...

An丶的博客 384

MYSQL-索引结构介绍、为什么选择B+树而不是B树

看了很多讲B树和B+树的文章,大多都是围绕各自的特性讲的,第一,树中每个结点最多含有m个孩子(m>=2);第二,……我也是从这些文章里弄懂了各种树的联系与区别,要真写,我可能还不如人家写得好。所以就在这里简明扼要的用几张图记录一下主要区别吧。 为了便于说明,我们先定义一条数据记录为一个二元组[key,data],key为记录的键值,key唯一;data为数据记录除key外的数据。 ...

z69183787的专栏 2万+

mysql 为什么最终选择了b+ 树

1.MySQL的底层数据结构是 B+ 树,为什么会选择B+ 树呢? 而不是 链表、hash表、红黑树、B树 这些数据结构呢? 链表:链表的随机读的时间复杂度是 O(n) ,不支持范围查询,当遇到范围查询时,只能一个一个的去遍历。 hash表: 要想使时间复杂度保持在 O(1),就需要优秀的 hash 算法,让数据均匀分布在散列表中。 因为数据在散列表中是均匀分布的,所以没有顺序,即 hash 表不支持范围查询。 hash表需要大量的内存空间,将索引全部都加载到内存中。 红黑树: 这里要稍稍、

骑着蜗牛向前跑的博客 257

Mysql索引为什么选择B+树

Mysql索引底层数据结构(B+树) 索引是放到内存中还是在磁盘中? 磁盘,虽然内存的读取速度很快,但是我们还是把索引存放到磁盘上,这样的话,当我们在硬盘上进行查询时,也就产生了磁盘的IO。相比于内存的存取来说,磁盘的IO存取消耗的时间要高的多。但是数据是在磁盘中的,因为放到内存中的话有可能导致数据丢失,另一个原因是内存相对于磁盘来说更加珍贵,不会有太多的内存让我们当数据库来使。所以索引也存储在磁盘中,通过索引来使磁盘IO减少,从而提高效率。 其实在使用B+树作为索引的底层结构之前我们可以考虑一下我们之前学

liulong999的博客 363

为什么 MySQL 选择使用 B+树作为索引结构?

作为索引结构,而不是其他数据结构(如 B-树、哈希索引、红黑树等),主要是因为。,需要 30+ 次磁盘 IO,查询速度大大降低。的索引结构,在磁盘 IO、范围查询、排序等方面。而如果使用红黑树,树的高度可能高达。数据库索引的查询性能很大程度上取决于。B-树、哈希索引和红黑树。MySQL 之所以选择。:B+树是 MySQL。

Zero_pl的博客 980

mysql b树 外键_为什么 MongoDB 选择B树,Mysql 选择B+树?

本文献给准备面试或者是还在面试的你。常见面试题,送分题目,不拿白不拿。一、B树和B+树的区别很明显,我们想向弄清楚原因就要知道B树和B+树的区别。为了不长篇大论。我们直接给出他们的形式总结他们的特点。1、B树B树是一种自平衡的搜索树,形式很简单:这就是一颗B-树。针对我们这个问题的最核心的特点如下:(1)多路,非二叉树(2)每个节点既保存索引,又保存数据(3)搜索时相当于二分查找其他的基本上都是一...

weixin_27977279的博客 932

为什么 MySQL 选择使用 B+ 树作为索引结构?

MySQL选择B+树作为索引结构,是因为B+树能够在磁盘存储环境中提供高效的查询性能。它的自平衡特性、支持高效的范围查询、减少磁盘I/O操作以及能够处理大规模数据集的能力,使其成为关系数据库索引的理想选择。B+树在处理频繁的增删改查操作、提高数据访问速度以及范围查询时表现出色,这些特点都符合MySQL数据库系统的需求。高效的范围查询:B+树是一种自平衡的树结构,所有的叶子节点都在同一层,因此支持高效的范围查询。

Weiki的博客 2186

二叉树、B树(B-树)、B+树、B*树详解,以及为什么MySQL选择B+树做索引

温故而知新,可以为师矣。看到一篇介绍B数和B减树的文章,这里记录一下。 1. 简要 众所周知,MySQL的索引使用了B+树的数据结构。那么为什么不用B树呢? 先看一下B树和B+树的区别。 2. 二叉树 先介绍一下二叉搜索树。 顾名思义,二叉搜索树,即指最多拥有两个叉,这里的叉即为所有非叶子结点的儿子(Lift和Right); 所有的结点存储一个关键字; 非叶子结点的左指针指向小于其关键字的结点,右指针指向对于其关键字的结点,结构如下图: 二叉搜索树的搜索,从根结点开始,如果查询的关...

zzhongcy的专栏 4424
上一篇: 如何优化 MySQL
下一篇: MyISAM 引擎和 InnoDB 引擎中索引存储的区别
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个双子座的Java攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值