前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL InnoDB 是怎么使用 B+ 树存数据的?

MySQL InnoDB 是怎么使用 B+ 树存数据的?

作者头像
WindWant
发布于 2023-09-02 10:57:57
发布于 2023-09-02 10:57:57
2340
举报
文章被收录于专栏:后端码事后端码事

这里限定 MySQL InnoDB 存储引擎来进行阐述,避免不必要的阅读歧义。

首先通过一篇文章简要了解下 B 树的相关知识:你好,我是B树

B+ 树是在 B 树基础上的变种,主要区别包括:

  • 1、所有数据都存储在叶节点,其它几点作为索引存储。
  • 2、数据节点添加链指针,便于横向检索。

数据是怎么检索的?

从根节点作为起始检索点,逐层向下检索,直至找到目标数据。检索的路径复杂度度跟树的高度成正比。

如上第一点,B+ 树所有数据存储于叶子节点,那么路径上就可以存储更多的索引指针数据,进而使得数据的高度降低。能够极大的提升检索效率。

InnoDB 数据文件空间管理

Tablespaces -> Segments -> Extends -> Pages 级联。

Page <-> Row

Page 是 MySQL 最小的存储管理单元,默认的大小为 16KB。最大行数据需要稍微小于 Page 大小的 1/2,超过的化作额外存储处理。

Page <-> B+ 树

MySQL InnoDB 表会使用一种特殊的索引聚簇索引来存储行数据,索引中会包含主键数据。

索引的底层数据结果为 B+ 树(其它特殊此处不做赘述)。

如下图:

一个节点对应一个 Page,MySQL 每次读取的基本操作单元。

B+ 树的高度与表数据存储量大小

I:索引节点,每个节点可存储的指针数。

H:树的高度。

R:叶节点,每个节点可以存储的记录数。

一张表可以存储的记录数:N = pow(I, H - 1) * R。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
详述 MySQL 中 InnoDB 的索引结构以及使用 B+ 树实现索引的原因
在 MySQL 的众多存储引擎中,InnoDB 是最常用的存储引擎,也是 MySQL 现阶段唯一免费支持事务机制的存储引擎。在本文中,我们以 InnoDB 为例,介绍 MySQL 的索引结构以及其使用 B+ 树实现索引的原因。
CG国斌
2021/12/07
1.2K0
详述 MySQL 中 InnoDB 的索引结构以及使用 B+ 树实现索引的原因
MySQL:InnoDB一棵B+树可以存放多少行数据?
1千万,2千万,或者上亿条数据?具体的答案不重要,当然肯定也不会是一个固定的数目,今天我们就一起来探讨探讨这个问题。
崔笑颜
2020/12/15
1.3K0
MySQL:InnoDB一棵B+树可以存放多少行数据?
是什么影响了MySQL索引B+树的高度?
提到MySQL,想必大多后端同学都不会陌生,提到B+树,想必还是有很大部分都知道InnoDB引擎的索引实现,利用了B+树的数据结构。
架构精进之路
2022/12/21
5560
是什么影响了MySQL索引B+树的高度?
【深入学习MySQL】MySQL的索引结构为什么使用B+树?
在MySQL中,无论是Innodb还是MyIsam,都使用了B+树作索引结构(这里不考虑hash等其他索引)。本文将从最普通的二叉查找树开始,逐步说明各种树解决的问题以及面临的新问题,从而说明MySQL为什么选择B+树作为索引结构。
Java_老男孩
2019/12/02
8930
面试题:InnoDB中一棵B+树能存多少行数据?
因为这是可以算出来的,要搞清楚这个问题,我们先从 InnoDB 索引数据结构、数据组织方式说起。
良月柒
2019/06/10
6.5K2
面试题:InnoDB中一棵B+树能存多少行数据?
阿里二面:MySQL索引是怎么支撑千万级表的快速查找?
在 MySQL 官方提到,改善操作性能的最佳方法 SELECT 在查询中测试的一个或多个列上创建索引。索引条目的作用类似于指向表行的指针,从而使查询可以快速确定哪些行与WHERE子句中的条件匹配,并检索这些行的其他列值。所有MySQL数据类型都可以建立索引。
Java程序猿
2022/06/10
1.1K0
一文说清楚Mysql Innodb的B+树索引原理及其推理过程
网上找了很多关于Innodb B+树索引原理的文章,但都不尽如意。基本都是列出了最后的结果,没有说清楚B+树的推理过程,让人看的云里雾里。本文会由浅入深的讲解B+树的推理过程,毕竟,知其然才能知其所以然。
诺浅
2020/08/19
1.4K0
MySQL的B+tree索引实现原理
官方定义:索引(Index)是帮助MySQL高效获取数据的数据结构,即索引是数据结构。 其出现就是为了提高数据查询效率,就像书的目录。
JavaEdge
2021/02/22
6340
MySQL的B+tree索引实现原理
InnoDB为什么使用B+树实现索引?
InnoDB 为什么使用 B+树实现索引?说到这个话题,就需要先聊一聊 InnoDB 的索引类型有哪些?
@派大星
2024/05/29
1790
InnoDB为什么使用B+树实现索引?
MySql进阶索引篇01——深度讲解索引的数据结构:B+树
索引是存储引擎中一种用于快速找到数据的存储结构,他就像《新华字典》的目录,可以使我们查每个字的速度大大提升。
半旧518
2022/10/26
2.4K0
MySql进阶索引篇01——深度讲解索引的数据结构:B+树
MySQL的查询需要遍历几次B+树,理论上需要几次磁盘I/O?
一、前言 这个问题是博主去年面试的时候被大佬问过的问题,当时也不大清楚里面的原理,硬着头皮回答的,当然,最终面试也没过,哈哈。最近刚好研究了这块的一些东西,就有种恍然大悟的感觉,这里分享给大家,欢迎拍砖~
码农编程进阶笔记
2021/07/20
2.3K0
MySQL索引原理——B树
1、MyISAM是MySQL 5.5之前版本默认的存储引擎,从5.5之后,InnoDB开始成为MySQL默认的存储引擎。MyISAM和InnoDB都是使用B+树实现主键索引、唯一索引和非主键索引。
saintyyu
2021/11/22
6760
MySQL索引原理——B树
MySql的InnoDB的三层B+树可以存储两千万左右条数据的计算逻辑
B+树是一种在非叶子节点存放排序好的索引而在叶子节点存放数据的数据结构,值得注意的是,在叶子节点中,存储的并非只是一行表数据,而是以页为单位存储,一个页可以包含多行表记录。非叶子节点存放的是索引键值和页指针。
朱季谦
2022/09/24
4.3K0
MySql的InnoDB的三层B+树可以存储两千万左右条数据的计算逻辑
心态崩了,我怎么知道实际生产环境的 B+ 树索引有多少层?
关于这个问题最近好像在牛客上经常看到,感觉没啥意义,可能主要考察的是对 B+ 索引的理解吧。先上答案:
飞天小牛肉
2022/02/23
4410
心态崩了,我怎么知道实际生产环境的 B+ 树索引有多少层?
为什么 MySQL 使用 B+ 树
首先需要澄清的一点是,MySQL 跟 B+ 树没有直接的关系,真正与 B+ 树有关系的是 MySQL 的默认存储引擎 InnoDB,MySQL 中存储引擎的主要作用是负责数据的存储和提取,除了 InnoDB 之外,MySQL 中也支持 MyISAM 作为表的底层存储引擎。
大忽悠爱学习
2023/02/26
4690
为什么 MySQL 使用 B+ 树
MYSQL数据库-索引
MYSQL数据库-索引 零、前言 一、索引概念 二、认识磁盘 三、理解索引 1、如何理解Page 2、B+ vs B 3、聚簇索引 VS 非聚簇索引 4、普通索引 5、总结 四、索引操作 1、创建索引 2、查询索引 3、删除索引 零、前言 本章主要讲解MYSQL数据库中的索引这一重要知识点 一、索引概念 索引的价值: 提高数据库的性能,索引是物美价廉的东西了:不用加内存,不用改程序,不用调sql,只要执行正确的create index ,查询速度就可能提高成百上千倍,但是查询速度的提高是以插入、更新
用户9645905
2022/12/11
2.1K0
MYSQL数据库-索引
mysql-innodb之B+树
将记录按有序化排列后,将查找的数据和有序队列中的中点位置的数据进行比较后排除一半数据再以此类推,查询次数一般为log2n, 比如n为10,则查询次数为3~4之间
爱学习的羊羊
2025/03/13
1150
你不知道的B+树索引
(1)页头: 页 ID, 指向前一页和后一页的指针, 存储的数据类型等信息, 共 38B;
一个架构师
2022/06/20
2560
你不知道的B+树索引
不准犹豫!再有人问你为什么MySQL用B+树做索引,就把这篇文章发给她
索引这个词,相信大多数人已经相当熟悉了,很多人都知道MySQL的索引主要以B+树为主,但是要问到为什么用B+树,恐怕很少有人能把前因后果讲述的很完整。本文就来从头到尾介绍下数据库的索引。
帅地
2019/11/10
1K0
【MySQL】InnoDB 是如何存储数据的
InnoDB 是怎么存储数据的?数据目录 -> 聚簇索引 -> 页 -> 行格式 -> 独立表空间 -> 区,组,段 -> 系统表空间……
JuneBao
2022/10/26
6.1K0
【MySQL】InnoDB 是如何存储数据的
推荐阅读
相关推荐
详述 MySQL 中 InnoDB 的索引结构以及使用 B+ 树实现索引的原因
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档