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

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

MySQL 之所以选择 B+树 作为索引结构,而不是其他数据结构(如 B-树、哈希索引、红黑树等),主要是因为 B+树在数据库索引场景下具有更好的查询性能、磁盘 IO 友好性和范围查询效率。以下是 B+树作为 MySQL 索引的关键优势:


1️⃣ B+树 vs. B-树

特性B+树B-树
叶子节点存储数据✅ 仅叶子节点存数据❌ 所有节点都存数据
范围查询✅ 叶子节点间有链表,查询快❌ 范围查询较慢
磁盘读取效率✅ 只存索引,单节点存储更多❌ 数据和索引混存,占用更多空间
树的高度✅ 更矮(减少磁盘 IO)❌ 更高(增加磁盘 IO)

B+树的主要优化点

  1. 非叶子节点仅存储索引,不存储数据

    • B+树的 非叶子节点 只存储 键值(索引),不会存放实际数据,这样一个节点能存 更多索引,从而 减少树的高度,提高查找效率。
  2. 磁盘访问次数更少(减少IO操作)

    • 数据库通常采用 磁盘存储,一次磁盘读取是按 页 读取(一般 16KB)。B+树每个非叶子节点可存 大量索引,从而降低树的高度,使得查询时需要的磁盘 IO 次数更少,速度更快。
  3. 范围查询更快(叶子节点有链表)

    • B-树 的范围查询必须回溯树结构,而 B+树 的 叶子节点通过双向链表连接,可以直接进行 顺序扫描,范围查询的性能远高于 B-树。

2️⃣ B+树 vs. 哈希索引

特性B+树哈希索引
支持范围查询✅ 快速❌ 只能精准匹配
支持排序✅ 是有序结构❌ 无序
适用场景✅ 适合大多数查询❌ 仅适用于等值查询
冲突处理✅ 无冲突❌ 需要处理哈希冲突

为什么不用哈希索引?

  • 哈希索引适用于 等值查询(如 WHERE id = 100),但 无法进行范围查询(如 WHERE id BETWEEN 50 AND 100)。
  • MySQL ORDER BY 需要有序索引,而哈希索引是无序的,无法提供高效的排序查询。

3️⃣ B+树 vs. 红黑树

特性B+树红黑树
适用场景✅ 适合磁盘存储❌ 适合内存存储
节点存储量✅ 一个节点存多个索引❌ 一个节点只存一个索引
磁盘访问次数✅ 少,IO 更少❌ 多,IO 更高

为什么不用红黑树?

  • 红黑树适用于内存索引(如 HashMap),但 MySQL 的索引需要 磁盘存储,红黑树的单个节点只能存一个索引,会导致树的高度很高,查询时磁盘 IO 太多,性能低下。
  • B+树的非叶子节点存更多索引,能保持树的高度较低,从而减少磁盘 IO,查询更快。

4️⃣ 低树高:减少磁盘 IO,提高查询效率

数据库索引的查询性能很大程度上取决于磁盘IO次数。
假设:

  • 一个 B+树的节点大小是 16KB(MySQL 默认的 InnoDB 数据页大小)。
  • 每个索引占 8 字节,则一个节点可存放 16KB / 8B = 2048 个索引。
  • 假设有 10 亿条数据,如果使用 B+树索引:
    • 第一层(根节点) 存 2048 个索引,管理 2048² ≈ 400 万 条记录。
    • 第二层(中间节点) 管理 2048³ ≈ 8 亿 条记录。
    • 第三层(叶子节点) 才存储实际数据。

只需 3 次磁盘 IO 就能找到数据! 而如果使用红黑树,树的高度可能高达 30+ 层,需要 30+ 次磁盘 IO,查询速度大大降低。


总结

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

  1. 磁盘 IO 更少(降低查询时间)

    • B+树的非叶子节点不存数据,可以存更多索引,树的高度更低,查询时磁盘 IO 更少,速度更快。
  2. 支持范围查询 & 排序

    • 叶子节点通过 链表连接,范围查询(BETWEEN)和排序(ORDER BY)效率极高,而哈希索引无法支持范围查询。
  3. 提高查询性能

    • B+树的索引结构可以高效查找、批量读取,特别适用于 MySQL 海量数据的索引优化。
  4. 适合磁盘存储

    • 红黑树适用于内存,而 B+树适用于磁盘存储,减少了磁盘访问次数,提高了性能。

结论:B+树是 MySQL 查询效率最优 的索引结构,在磁盘 IO、范围查询、排序等方面全面优于 B-树、哈希索引和红黑树。

mysql为什么要使用B+树作为索引 1 概述 大家可能在面试的时候都会被问到这样一个问题:mysql的索引结构是什么?这个时候了解的都知道是B+树,那么为什么会采用B+树作为它的索引结构呢? 由图可以知道:索引的存在时为了加快数据访问提高查询效率的,而数据存储在磁盘中,但从磁盘读取数据会产生大量的IO操作,读取效率是非常低的。所以在读取的时候要减少io量和减少io次数来提高读取效率。 ... 阅读详情

相关推荐

面试题:MySQL为什么选择B+树作为索引结构

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

xuxu96 599

mysql为什么要用b+树

mysql为什么要用b+树

qq_40263124的博客 6229

PHP项目实战:易宝支付SDK对接全流程(含回调处理与常见问题排查)

本文详细介绍了PHP项目中易宝支付SDK的对接全流程,包括环境准备、SDK配置、支付请求构建与发起、回调处理实战以及常见问题排查。特别针对回调处理环节的常见问题提供了解决方案,帮助开发者快速完成支付对接并优化性能。

weixin_29007809的博客 383

mysql为什么使用b+树

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

weixin_42588555的博客 2075

FPGA高速接口Aurora8B/10B协议实战:从IP核配置到数据流优化

本文详细介绍了FPGA高速接口Aurora8B/10B协议的实战应用,从IP核配置到数据流优化的全流程。通过Aurora8B/10B协议,开发者可以在FPGA间实现高效的数据传输,适用于高速接口设计。文章涵盖了协议基础、IP核配置、AXI4-Stream接口实战技巧以及性能优化策略,帮助读者快速掌握这一关键技术。

weixin_29280657的博客 265

编译hive-3.1.3(3.0.0)和编译tez-0.10.2适配hadoop-3.3.4以及hadoop-3.2.2(附安装包)

编译hive-3.1.3(3.0.0)和编译tez-0.10.2适配hadoop-3.3.4以及hadoop-3.2.2(附安装包)

2301_77356579的博客 2590

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

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

jkzyx123的博客 4688

Altair HyperWorks 2022.3.0 Suite下载

Altair HyperWorks开发团队提供了新的一流技术,以设计和优化高性能、高效和创新的产品,并发布了HyperWorks 2021.2套件。与所有新版本一样,这个版本包含了新特性、增强功能,并修复了前一个版本中用户报告的各种问题,提供了总体上更稳定的体验。链接: https://pan.baidu.com/s/1rYietmQLQUboHiJzYoE9WQ?pwd=m9yh 提取码: m9yh 复制这段内容后打开百度网盘手机App,操作更方便哦。

weixin_48469365的博客 2109

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

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

m0_54258715的博客 1494

Cursor赋能Qt C++:从环境配置到项目构建的AI开发新范式

本文详细介绍了如何利用Cursor工具链提升Qt C++开发效率,从智能环境配置到CMake项目构建的全流程实践。通过AI辅助编程、Qt生态优化及高级调试技巧,开发者可快速完成从传统开发到AI驱动的新范式转换,显著缩短项目搭建时间并提升代码质量。

weixin_30329623的博客 545

39、信号流图:解决线性代数方程组的图论方法

本文介绍了信号流图理论在求解线性代数方程组中的应用,重点阐述了Coates方法和Mason方法的原理、步骤及对比分析。通过图论视角,将矩阵运算转化为对有向图结构的分析,利用1-因子、1-阶连接、前向路径和反馈回路等概念,推导出方程组解的拓扑公式。文章结合具体实例演示两种方法的计算过程,并总结其在电路分析、控制系统和通信系统等领域的拓展应用,展示了信号流图理论的直观性与有效性。

pear55的博客 85

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

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

Weiki的博客 2187

剪映专业版教程:用AI生成音乐MV并重新制作画面—《漂泊与归梦》完全原创实战

本文详细拆解如何用AI生成音乐MV并重新制作画面的全流程。以歌曲《漂泊与归梦》为例,首先用AI将歌词转化为带音乐的MP4文件;导入剪映后分离音频并删除原视频,通过“识别字幕”功能提取歌词文本并逐句核对修正;接着设置“向右擦除”动画并锁定字幕轨道;最后根据歌词意境配置动漫、风景等非真人画面规避审核风险。教程涵盖从AI生成、音频分离、字幕提取到画面重制的每个环节,助你打造完全原创、无侵权风险的音乐短视频。

深耕计算机专业知识与技术。 1060

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

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

博客 966

SAP ABAP CO核心扩展-ZCKMLQS 多物料工厂的评估数量结构报表(CKMLQS)

CKMLQS 只能查看单一物料工厂的评估数量结构,SAP 没有提供多物料工厂的评估数量结构报表。这篇文章将实现 CO核心扩展-ZCKMLQS 多物料工厂的评估数量结构报表。

SAP李斌,本人承诺所有原创文章均不使用任何AI生成技术,请大家放心阅读。 1074

VB摄像头监控

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

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

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

yjq125931902的博客 586

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

一、概述 MySQL有多种存储引擎,每种引擎都有自己的特点,实际应用中我们可以根据自己的需要选择。常用的存储引擎有MyISAM、InnoDB等,其中MyISAM是MySQL数据库自带引擎,InnoDB是其他公司以插件的形式嵌入MySQL。 我们知道,MySQL数据存储在磁盘,磁盘IO会成为最大的性能瓶颈,因此设计的目标应该是尽量减少IO访问次数;而IO次数的操作跟树的高度成正比,树的高度越高,每次执行增删改查的IO操作次数越多,因此我们在选择、设计的时候需要树高将作为一个重要参考项。 本文通过对几种树形结构

locahuang的博客 396

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

猫轻王的博客 2259

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

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

SAFE20242034的博客 1104

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

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

yymagicer的博客 823

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

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

m0_72560900的博客 805

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

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

qq_43842093的博客 475

数据库面试必备:MySQL为什么选择B+树作为索引结构?

在数据库系统中,索引是提高查询效率的关键技术。MySQL作为最流行的关系型数据库之一,其InnoDB存储引擎选择了B+树作为主要的索引结构。本文将深入探讨MySQL选择B+树的原因,并通过流程图帮助理解相关概念。

qq_58299462的博客 1525
上一篇: MySQL 中使用索引一定有效吗?如何排查索引效果?
下一篇: MySQL 是如何实现事务的?
Zero_pl
博客等级 码龄4年 978粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值