MySQL为何选择B+树作为索引结构

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

一、概述

MySQL有多种存储引擎,每种引擎都有自己的特点,实际应用中我们可以根据自己的需要选择。常用的存储引擎有MyISAM、InnoDB等,其中MyISAM是MySQL数据库自带引擎,InnoDB是其他公司以插件的形式嵌入MySQL。

我们知道,MySQL数据存储在磁盘,磁盘IO会成为最大的性能瓶颈,因此设计的目标应该是尽量减少IO访问次数;而IO次数的操作跟树的高度成正比,树的高度越高,每次执行增删改查的IO操作次数越多,因此我们在选择、设计的时候需要树高将作为一个重要参考项。

本文通过对几种树形结构的特点进行分析、比较,说明为何MySQL选择B+树作为索引结构。



二、树形结构分析、比较

1、二叉查找树

二叉查找树(BST,Binary Search Tree)也叫二叉排序树。

特点:

  • 任意节点的左子树上所有节点值不大于根节点的值。
  • 任意节点的右子树上所有节点值不小于根节点的值。
    在这里插入图片描述
    应用场景
    二叉查找树一般常用于快速查找。

时间复杂度
由于查询时间取决与树高,因此平均时间复杂度是O(lgN)。
而特殊情况下,二叉查找树可能会退化为链表,此时时间复杂度为O(N)。
在这里插入图片描述
如果退化为链表,查询效率就非常低。因此二叉查找树的不平衡时,不适合于MySQL。
为了解决这个问题,我们引入平衡二叉树。


2、平衡二叉树(AVL)

特点
除了包含二叉查找树的特点外,主要特点是:任何节点的两个子树的高度最大差为1。

在这里插入图片描述
上图非AVL图,9号子树与3、5号子树的高度差为2;AVL图9号子树与4、7子树的高度差为1。

时间复杂度
平衡二叉树实现平衡的关键在于旋转操作。
插入和删除操作都有可能破坏二叉树的平衡,这时需要通过一次或多次树旋转来重新平衡这个树。
1)插入数据:最多只需要1次旋转。
2)删除数据:AVL需要维护从被删除节点到根节点这条路径上所有节点的平衡,旋转次数为O(lgN)。

这样,AVL树在删除数据时效率就比较低;如果删除操作越多,维护平衡所需的时间代价越大,因此旋转耗时过长情况下,不太适合MySQL增删改查操作。

应用场景
适合插入和删除次数比较少,但查找次数比较多的情况。


3、红黑树

特点
红黑树只需确保从根到叶子的最长的可能路径不多于最短的可能路径的2倍长,无须像平衡二叉树那样严格的平衡要求。用来换取增删节点时候旋转次数的降低,任何不平衡都会在3次旋转之内解决。

应用场景
多用于搜索、插入、删除操作多的情况。

与AVL的比较
1)由于红黑树比AVL稍微不平衡多一层,因此红黑树的查询性能可能会比相同内容的AVL要低。
2)红黑树插入、删除操作性能优于AVL,AVL树每次插入、删除会进行大量的平衡度计算,而红黑树为了维持红黑树性质所做的红黑变换和旋转的开销,相较于AVL树小得多。
3)总的来说,红黑树的统计性能高于AVL。

对于在内存中的数据操作,红黑树的表现还是非常不错的。不过对于在磁盘等存储设备中的数据操作,红黑树表现就没那么好了。因为红黑树的高度,对于磁盘存储类的设备来说,还是太高了。


4、平衡多路查找树(B树)

平衡多路查找树(B-Tree),是为磁盘等外存储设备设计的一种平衡查找树。与二叉树相比,B树的每个非叶节点可以有多个子树。因此当总节点数量相同时,B树的高度远远小于AVL树和红黑树。

特点
阶数(Order)是B树最重要的概念,对于一颗m阶B树,需要满足以下条件:
1)每个节点最多包含m个子节点。
2)如果根节点包含子节点,则至少包含2个子节点;除了根节点外,每个非叶节点至少包含m/2个子节点。
3)拥有k个子节点的非叶节点将包含k-1条记录。
4)所有叶节点都在同一层。
在这里插入图片描述

可以看出,B树的定义,主要是对非叶节点的子节点数量和记录数量的限制。

B树的优势除了树高小,还有对访问局部性原理的利用。所谓局部性原理,是指当一个数据被使用时,其附近的数据有较大概率在短时间内被使用。B树将键相近的数据存储在同一个节点,当访问其中某个数据时,数据库会将该整个节点读到缓存中;当它临近的数据紧接着被访问时,可以直接在缓存中读取,无需进行磁盘IO;换句话说,B树的缓存命中率更高。

B树在数据库中有一些应用,如mongodb的索引使用了B树结构。但是在很多数据库应用中,使用了是B树的变种B+树。


5、B+树

B+Tree是在B-Tree基础上的一种优化,使其更适合实现外存储索引结构。

与B树的区别:
1)B树每个节点,包括叶节点和非叶节点都存储所有数据(包括key、value),B+树非叶节点只存储key,只有叶子节点存储value。
2)B树一条记录只会出现一次,B+树的键则可能会重复出现。
3)B+树的叶节点之间通过双向链表链接。
4)B树的非叶节点,记录数比子节点个数少1;B+数中记录数与子节点个数相同。

在这里插入图片描述

B+树与B树相比,优势有:

  • 更少的IO次数:B+树的非叶节点只包含键,而不包含真实数据,因此每个节点存储的记录个数比B数多很多(即阶m更大),因此B+树的高度更低,访问时所需要的IO次数更少。此外,由于每个节点存储的记录数更多,所以对访问局部性原理的利用更好,缓存命中率更高。

  • 更适于范围查询:在B树中进行范围查询时,首先找到要查找的下限,然后对B树进行中序遍历,直到找到查找的上限;而B+树的范围查询,只需要对链表进行遍历即可。

  • 更稳定的查询效率:B树的查询时间复杂度在1到树高之间(分别对应记录在根节点和叶节点),而B+树的查询复杂度则稳定为树高,因为所有数据都在叶节点。

B+树劣势:
由于键会重复出现,因此会占用更多的空间。
但是与带来的性能优势相比,空间劣势往往可以接受,因此B+树的在数据库中的使用比B树更加广泛。

参考:https://www.php.cn/mysql-tutorials-436372.html

ss524v100 调试cvbs输出 启用视频层3 dev2 对应 layer3在vdec与vo绑定的时候(不需要经过vpss),不能绑定错误,以下是绑定的程序。 阅读详情

相关推荐

抖音私信卡片私信名片的原理分析

简单说一下它的功能吧:抖音私信卡片,解决了客户封号严重、引流效率低的痛点,所以从去年到现在,依然是热销品。"抖音快手私信名片链接跳转"是2022年抖音快手引流最新技术,可以生成卡片链接,支持标题、描述、logo以及跳转落地页的完全自定义配置.支持微信公众号和微信号复制唤起微信客户端app添加,同时也支持任意链接落地页跳转提高粉丝引流转化率,关注转化率,引流转化率,安全绿色私信卡片功能1、跳转微信用户点击卡片,自动跳转微信界面,显示好友和群聊二维码2、跳转链接用户点击卡片,自动跳转到指定链接,支持任意链接。3

m0_71385839的博客 5183

平衡二叉树思路分析及实现(图解+代码同步实现)

文章目录平衡二叉树思路分析及实现(图解+代码同步)解剖图解代码测试总结 平衡二叉树思路分析及实现(图解+代码同步) 解剖 ​ 需要明确的一点是 平衡二叉树本质就是二叉排序树只是它比二叉排序树多了一个性质: 任意节点左右子树的高度的绝对值之差 < = 1 ​ 这是平衡的基础,必须记住! 下面是针对两大类(4种情况)下 插入节点导致不平衡的时所进行的平衡调整代码实现 图解 右单旋转 当前节点的左子树高度 - 右子数高度 > 1 且没有其他情况 ​ 说明: 当插入节点

浮-沉 804

基于JAVA的GB28181实现之SIP服务核心组件解析

本文深入解析了基于JAVA的GB28181标准中SIP服务的核心组件实现,包括协议栈选择、消息处理引擎、事务管理器等关键技术点。通过实战案例分享海康威视、大华设备的特殊处理技巧,并提供性能优化和常见问题排查指南,帮助开发者高效构建稳定的视频监控系统。

weixin_30892037的博客 254

《数据结构》-第七章 查找(习题)

第七章 查找 对前几章这些数据结构的产生相应运算—查找。关于查找的不同算法为每年考试考查的重点,因此需要重点把握各个结构包括的查找方法及查找删除等操作的过程。对散列结构主要,应学握散列表的构造、冲突处理方法(各种方法的处理过程)、查找成功和查找失败的平均查找长度、散列查找的特征和性能分析。 因此,在考试过程中,会涉及多种题型,同时所占分值较大,要对本章内容重点把握。 一、选择题 1.如果要求一个线性表既能较快的查找,又能适应动态变化的要求,最好采用 ( )查找法。 ...

大家一起进步叭 1万+

Spec-Kit实战:用‘规范驱动开发’重构一个老旧Node.js项目(避坑指南)

本文详细介绍了如何使用Spec-Kit工具通过‘规范驱动开发’(SDD)重构老旧Node.js项目。从逆向工程提取规范到增量改造策略,再到避免典型陷阱,提供了实战指南和避坑技巧,帮助开发者高效实现架构现代化,显著提升代码质量和维护效率。

weixin_42525582的博客 544

WinForm多语言切换实战:5分钟搞定中英文界面(附完整代码)

本文提供了WinForm应用实现中英文界面切换的两种高效实战方案。通过利用内置的本地化机制和资源文件,开发者可以在5分钟内为窗体添加多语言支持,并附有完整代码示例,帮助快速应对软件国际化需求。

weixin_29230773的博客 402

c++判断二叉树是否为二叉搜索树_【原创教程】数据结构与算法(3)——平衡二叉树...

一、平衡二叉树什么是平衡二叉树:每个节点的两个子树的高度不会相差超过1。普通树和平衡二叉树的对比:为什么要用到平衡二叉树:在二叉搜索树里面,搜索操作的时间复杂度O(logN)到O(N)不等,这是一个巨大的性能差异。而平衡的二叉搜索树的搜索复杂度为O(logN)。常见的平衡二叉树的实现:红黑树、AVL树、伸展树、树堆二、判断是否为平衡二叉树自底至顶递归:做先序遍历,从底部开始,判断...

weixin_42180863的博客 265

Imagiq AI-PQ 图像质量增强模块详解:联发科 ISP 中的 AI 图像管线实战解析

随着智能手机影像系统对图像质量要求的持续提升,联发科在其 Imagiq ISP 中引入了 AI 驱动的图像增强模块——AI-PQ(AI-based Picture Quality),通过 AI 模型对亮度、色彩、噪声、锐度等多个维度进行动态调节与增强,实现更加智能化和个性化的图像输出效果。AI-PQ 在实际工程中已成为影响照片风格、视频观感和多模组一致性的核心能力之一。本文围绕 Imagiq 平台最新一代 AI-PQ 模块(2024-2025年量产平台为基础),结合实机开发与调优经验,深入剖析其各子模块的算

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1398

2024下半年软考《软件设计师》真题

希望用最快的速度从1000个无序数中挑选10个最大的数,哪个算法最快( ) A.冒泡排序 B.快速排序 C.堆排序 D.基数排序

琅琊之榜 1万+

企业级 Multi-Agent 实施指南:从需求拆解到上线验收的全流程方法论

本文基于12个不同行业(金融、制造、零售、互联网)的百万级Multi-Agent投产项目经验,提炼出一套可复用的全流程实施SOP,覆盖需求对齐与拆解、架构设计、开发实现、测试优化、上线部署、验收迭代6个核心阶段,包含标准化工具、量化指标、踩坑指南、可直接运行的代码示例,帮你避开90%的落地坑。需求阶段是项目成败的核心,必须对齐业务方的量化指标,明确系统边界架构设计要兼顾性能、安全、可扩展性,不要为了炫技选择复杂的框架工程化是投产的关键,测试、灰度、监控、降级机制缺一不可。

AI云原生与云计算技术学院 220

SAP CPI 如何代理第三方接口?

代理接口是指在系统 A 和系统 B 之间引入一个中间层(如 SAP CPI),由中间层负责接收来自系统 A 的请求,进行必要的处理或转换,然后将请求转发给系统 B。由于 OData 服务通常使用 JSON 格式的数据,而某些内部系统可能需要 XML 格式,因此我们添加一个 JSON 到 XML 的转换器,以确保数据格式的兼容性。为了确保返回的数据格式符合内部系统的要求,添加一个 XML 到 JSON 的转换器,将 OData 服务的响应从 XML 转换为 JSON。在集成包中,添加一个新的集成流,命名为。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1742

数据结构day7(2023.7.23)

树的基本概念、类型、结点之间的关系、二叉树的概念、特殊形态、类型、性质、存储形式、二叉树遍历以及二叉树相关内容的代码实现

m0_68542867的博客 1189

【信息系统项目管理师】第18章:项目绩效域详解

(3)度量绩效域与规划绩效域、项目工作绩效域和交付绩效域的相互作用:1规划构成了 交付和规划比较的基础;项目绩效域共同构成了一个统一的整体,作为一个完整系统,在项目生命周期过程中运行,系统内的每个绩效域相互作用、相互关联和相互依赖,并协调一致、共同运作,支撑项目目标和价值 的实现。(5)开发方法和生命周期绩效域与其他绩效域的相互作用:开发方法和生命周期绩效域与干系人绩效域、规划绩效域、不确定性绩效域、交付绩效域、项目工作绩效域和团队绩效域相互作用。(2)项目工作绩效域的绩效要点包括:项目过程;

数据知道的博客 7788

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

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

m0_54258715的博客 1494

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Devexpress16.2.6破解工具

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

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

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

Weiki的博客 2187

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

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

Zero_pl的博客 980

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

深入探究:MySQL为什么选择B+树作为索引结构?

MySQL选择B+树作为索引结构的原因是多方面的。B+树具有平衡性、有序性和高度平衡的特点,能够提供高效的查询性能和较低的存储空间开销。B+树适用于大规模数据存储和高效查询的场景,特别是对于范围查询和顺序遍历的需求。此外,MySQL引入了一些优化策略,进一步提高了B+树的性能和效率。未来,随着数据量的不断增加和查询需求的不断变化,索引结构可能会面临新的挑战和需求。因此,对于索引结构的研究和优化仍然具有重要的意义。我们期待未来能够有更加高效和灵活的索引结构出现,以满足不断变化的数据库需求。

博客 966

MySQL 索引结构选择B+树的合理性

哈希索引是一种基于哈希表的数据结构,主要用于等值查询(如IN二叉搜索树(BST)是一种有序树,左子节点小于根,右子节点大于根。AVL 树是一种自平衡二叉搜索树,每个节点的左右子树高度差最多为 1。B-Tree 是一种多路搜索树,广泛用于数据库索引。B+ 树是 B-Tree 的扩展,叶子节点形成链表。也是一种多路搜索树,基于B树做了改进,主流的DBMS都支持B+树的索引方式,比如Mysql,相对于B-树,B+树更适合于文件索引系统MySQL 支持多种存储引擎,如 InnoDB、MyISAM。

SAFE20242034的博客 1104

MySQL 索引为什么要选择 B 树这种数据结构?

B 树是一种自平衡的树形数据结构,它可以保持数据有序。B 树的设计目标是在磁盘读写操作中最小化 I/O 次数,从而提高数据访问的效率。B 树的每个节点可以包含多个键值对,并且每个节点可以有多个子节点。这种设计使得 B 树在磁盘上的存储和访问更加高效。

yjq125931902的博客 586

MySQL 选择 B+树作为索引数据结构的原因

MySQL 选择 B+树作为索引数据结构的原因与其设计特性息息相关。B+树不仅能很好地支持数据库常见的查询操作,还能高效处理大规模数据并优化磁盘IO操作。

yymagicer的博客 822

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

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

猫轻王的博客 2259

mysql:深度解析MySQL选择B+树作为索引结构的本质原因

业务场景优化手段预期收益指标超高并发点查缩短键长度+增大填充因子QPS提升30%~50%海量数据范围查询冷热分离+压缩叶子节点查询延迟降低60%+混合读写负载使用FPGA加速B+树遍历吞吐量提升3倍SSD环境调整innodb_io_capacity参数IOPS利用率提高40%阿里内部数据:在双11大促中,经过B+树优化的订单库可支撑峰值58万次/秒的查询请求,平均延迟<5ms。-- 检查页利用率。

weixin_43290370的博客 940

MySQL为何选择B+树而非B树作为索引结构?

数据库索引是提升查询性能的核心技术,其底层数据结构的选择直接影响系统效率。B树与B+树作为两种经典的多路平衡搜索树,在数据库系统中扮演着关键角色。B+树通过将数据集中存储在叶子节点、非叶子节点仅保留键值的独特设计,实现了比B树更优的磁盘I/O性能。这种结构特别适合数据库场景,能显著减少磁盘访问次数,提升范围查询效率。在MySQL的InnoDB引擎中,B+树索引通过优化的页结构和缓存机制,可以高效支持OLTP工作负载。对于常见的索引优化场景,如覆盖索引和索引下推技术,B+树都能提供更好的性能表现。理解B+树的

weixin_32932149的博客 318

Mysql索引数据结构有多个选择,为什么一定要是B+树呢?_面试 (MySQL 索引为啥要选择 B+ 树)

Mysql索引数据结构 下面列举了常见的数据结构 二叉树 红黑树 Hash表 B-Tree(B树) Select * from t where t.col=5 1 我们在执行一条查询的Sql语句时候,在数据量比较大又不加索引的情况下,逐行查询并进行比对,每次需要从磁盘上查找,每行数据可能在磁盘不同的位置,数据比较靠后的话,一千万数据可能要比对几百万,很耗费资源。 Mysql衡量查询效率的就是磁盘IO次数,那么Mysql中应该采用什么样的数据结构存储数据呢,以及为什么要使用那个数据结构呢。 二叉树 大多

qq_43842093的博客 475

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

MySQL 选择数据库的索引一般存储在磁盘上,而磁盘的读写速度远低于内存。假设每个索引节点大小为 4KB这意味着查询一个索引键通常只需要。7.总结🚀。

m0_72560900的博客 805
上一篇: MySQL集群方案及实现设计
下一篇: MySQL存储引擎MyISAM和InnoDB详谈
夏之七
博客等级 码龄12年 294粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值