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

news/2025/2/26 18:28:31


B+树是MySQL最常见的索引结构,大部分存储引擎都支持 B+ 树索引。

相对于其他竞争力强的数据结构,B+树都有战胜它们成为大多时候MySQL选择使用索引结构的理由:

第一个强有力的竞争对手是B树

1. B树每个节点都存储了完整的数据,而B+树只有叶子节点存储了完整的数据非叶子节点只存储key和指针,这样B+树的非叶子节点可以存更多的键,从而减少树的高度,减少磁盘I/O次数

2. 经典的B+树叶子节点会形成单链表,MySQL索引数据结构对经典的B+Tree进行了优化。在原B+Tree的基础上,增加一个指向相邻叶子节点的链表指针,使得这棵B+树的叶子节点形成了有序的双向链表。所以相比B树,B+树可以进行更高效的范围查询

用100 65 169 368 900 556 780 35 215 1200 234 888 158 90 1000 88 120 268 250 分别构建B树和典型B+树、

B树:

B+树:

在进行范围查询时,B+ 树可以先通过索引快速定位到范围的起始值所在的叶子节点。由于叶子节点是通过双向链表相连的,后续可以沿着链表顺序遍历,依次获取满足范围条件的所有数据记录。

但是B树要进行范围查询频繁回溯到父节点查找下一个节点,会造成更多次的磁盘I/O

3. 相对于B树,B+树拥有更稳定的查询性能。B+树的所有查询路径等长,每次查询都需要从根节点到叶子节点,路径长度相同,性能稳定(O(logN))。B树的数据可能分布在任意节点,某些查询可能在中间节点直接命中,查询性能不稳定。

另一个竞争者是二叉树(如红黑树) 相对于二叉树,树高较高(log₂N),存储海量数据时I/O次数远超B+树。这是因为B+树是多叉树,非叶子节点只存储key和指针,内存中能存放更多索引,容易命中缓存,使得磁盘I/O次数减少

B+树从根节点到叶子节点的路径长度(即树高)直接决定磁盘I/O次数

  • 树高为3 → 最多3次磁盘I/O即可定位数据

  • 树高为4 → 最多4次磁盘I/O

还有,B+树拥有高效的查找性能,它是多路平衡搜索结构,能减少磁盘 I/O 操作,还可像二分查找一样快速定位数据,数据存储具有冗余与可靠性的特点,能适应动态数据变化,在数据插入和删除时可通过结构调整保持平衡和有序。

而且B+树的节点大小通常设计成和磁盘页的大小一致,这样每次读取一个节点刚好是一个磁盘页,减少I/O次数。

我们反复提到了B+树可以减少磁盘I/O次数,为什么要那么在乎磁盘I/O次数呢?

磁盘I/O(Input/Output)是计算机从磁盘读取数据到内存(读I/O),或将内存数据写入磁盘(写I/O)的过程。

这是因为

  • 磁盘访问速度远慢于内存

    • 内存访问速度:纳秒级(约100ns)。

    • 磁盘访问速度(机械硬盘):毫秒级(约10ms),比内存慢10万倍!

  • 减少磁盘I/O是MySQL性能优化的核心目标之一

综上,B+树在磁盘I/O效率范围查询性能稳定性存储利用率之间取得了最佳平衡,使其成为数据库索引的理想选择。


http://www.niftyadmin.cn/n/5869055.html

相关文章

Postman参数介绍

Params 查询参数 Params 请求url信息,会补充请求的url 在 Postman 中处理查询参数(Query Parameters) 查询参数以键值对形式附加于 URL 末端,用于调整请求结果,在 Postman 中的传递通过用户友好的界面轻松完成。 首…

【滑动窗口算法】-- 长度最小的子数组

文章目录 1. 题目2. 题目解析3. 代码 1. 题目 在线oj 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组&…

Java如何解决彻底解决,大数据量excel导出内存溢出问题

一、核心工具选型:流式处理框架 1. 使用EasyExcel(推荐) 阿里巴巴开源的EasyExcel基于流式读写设计,通过逐行处理数据避免内存堆积。 优势: 内存占用低,支持百万级数据导出; 内置分页写入、自…

办公自动化|xlwings使用公式和函数

1. 介绍 xlwings xlwings 是一个强大的 Python 库,能够用于 Excel 自动化操作。除了基本的数据读写和格式设置,xlwings 还支持写入 Excel 公式、调用内置函数以及创建自定义函数,使得 Python 与 Excel 之间的交互更加灵活。 2. 在单元格中使…

智慧城市与安防监控:PoE交换机在高清视频监控中的优势

安防监控系统,尤其是高清摄像头(如IP摄像头、PTZ云台、热成像摄像头)在现代安防应用中大量部署,这些设备对电力和数据的传输需求非常高。传统的电源布线方式往往不能满足大规模、高质量设备的需求,而PoE交换机不仅解决…

跳跃游戏两则

跳跃游戏 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 思路 这里只…

Linux | RHEL / CentOS 中 YUM history / downgrade 命令回滚操作

注:英文引文,机翻未校。 在 RHEL/CentOS 系统上使用 YUM history 命令回滚升级操作 作者: 2daygeek 译者: LCTT DarkSun 为服务器打补丁是 Linux 系统管理员的一项重要任务,为的是让系统更加稳定,性能更加…

Web核心、HTTP

JavaWeb技术栈 B/S 架构:Browser/Server,浏览器/服务器 架构模式,它的特点是,客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,获取Web资源,服务器把Web资源发送给浏览…