当前位置: 首页 > news >正文

mysql B+树 如果有3层,能保存多少数据

MySQL 中 3 层的 B + 树结构最多能存储多少条数据,这个问题需要结合 B + 树的结构特点和页大小来计算。

一、先明确核心前提

MySQL 的 InnoDB 存储引擎中,B + 树的每个节点对应一个数据页(默认大小 16KB=16384 字节),我们需要先确定:
  1. 非叶子节点:只存储「索引键 + 子节点指针」,不存数据;
  2. 叶子节点:存储「索引键 + 数据行指针 / 整行数据」(主键索引叶子节点存整行,二级索引存主键);
  3. 指针大小:InnoDB 中指针固定为6 字节;
  4. 索引键大小:以最常见的BIGINT主键(8 字节)为例(如果是 INT 则 4 字节,可替换计算)。

二、分步计算(以 BIGINT 主键为例)

1. 计算非叶子节点的子节点数(扇出数)

非叶子节点的每个条目 = 索引键(8 字节) + 子节点指针(6 字节) = 14 字节。
一个 16KB 的页,扣除页头 / 页尾的固定开销(约 100 字节),可用空间约 16284 字节。
 
单页可存储的条目数 = 16284 ÷ 14 ≈ 1163(向下取整,保证不超页大小)。
即:每个非叶子节点最多指向 1163 个子节点(扇出数 = 1163)。

2. 3 层 B + 树的层级结构拆解

3 层 B + 树的结构是:「根节点(第 1 层)」→「中间节点(第 2 层)」→「叶子节点(第 3 层)」。
  • 第 1 层(根节点):1 个节点,最多指向 1163 个第 2 层节点;
  • 第 2 层(中间节点):最多 1163 个节点,每个节点又指向 1163 个第 3 层叶子节点;
  • 第 3 层(叶子节点):最多 1163×1163 = 1352569 个节点。

3. 计算叶子节点的单页数据行数

叶子节点存储整行数据(主键索引),假设每行数据大小为 1KB(实际可根据业务调整,比如 512 字节、2KB):
单叶子页可存行数 = 16KB ÷ 1KB = 16 行(若行更小,比如 512 字节,则单页存 32 行)。

4. 最终总数据量计算

总数据行数 = 叶子节点数 × 单叶子页行数
= 1163×1163 × 16
≈ 1163² ×16 = 1352569 ×16 ≈ 21641104 行(约 2164 万行)。
 

三、不同条件下的调整

 
如果调整参数,结果会变化,举 2 个常见例子:
 
调整条件扇出数叶子单页行数3 层 B + 树总行数
主键为 INT(4 字节) ~1809 16 ≈1809²×16≈5227 万
行大小为 512 字节 1163 32 ≈4328 万
页大小改为 32KB ~2327 32 ≈2327²×32≈17298 万
 

总结

  1. 3 层 B + 树的存储量核心取决于非叶子节点的扇出数(由索引键大小、页大小决定)和叶子节点单页行数(由行大小决定);
  2. 以默认 16KB 页、BIGINT 主键、1KB 行大小为例,3 层 B + 树约能存2164 万行;
  3. 实际场景中,因页内开销、行大小差异,实际存储量会略低于理论值,但量级基本一致(千万级)。

-------------------------

这个 100 字节的固定开销,是InnoDB 数据页结构中 “页头 + 页尾” 的通用估算值,并非精确值,本质是对页元数据占用空间的简化描述。

 

一、先看 InnoDB 数据页的完整结构

 
InnoDB 的 16KB 数据页,整体分为 7 个部分,其中页头(File Header)、页尾(File Trailer) 是所有类型数据页(不管是叶子节点还是非叶子节点)都必须有的固定结构,再加上少量其他固定元数据,共同构成了这约 100 字节的开销。
 
数据页结构大小(字节)作用
File Header(页头) 38 存储页的通用信息:页类型(叶子 / 非叶子)、上一页 / 下一页指针、页编号、创建时间等
Page Header 56(非叶子节点)/ 12(叶子节点) 存储当前页的特有信息:如非叶子节点的指针数量、叶子节点的记录数等
Infimum/Supermum 26 页内的最小 / 最大虚拟记录,用于界定记录范围,是固定存在的
User Records 可变 实际存储的用户数据(叶子节点)或索引 + 指针(非叶子节点)
Free Space 可变 页内的空闲空间
Page Directory 可变 页内记录的目录项,加速记录查找
File Trailer(页尾) 8 存储页的校验和、事务 ID 等,用于校验页的完整性(防止数据损坏)
 

二、“约 100 字节” 的估算逻辑

我们以非叶子节点(计算扇出数时用的就是非叶子节点)为例,把固定必有的元数据加起来:
  1. File Header(38 字节) + File Trailer(8 字节) = 46 字节;
  2. 加上 Page Header(非叶子节点 56 字节)的核心固定部分;
  3. 再加上 Infimum/Supermum 的基础开销(26 字节)中的一小部分;
把这些核心固定元数据相加,大概在 90-120 字节 之间,为了计算方便,就统一估算为 100 字节。

三、为什么不用精确值?

  1. 不同页类型的开销有差异:叶子节点的 Page Header 只有 12 字节,比非叶子节点的 56 字节小很多,精确计算会增加复杂度;
  2. 相对 16KB 的页大小,100 字节的影响极小:16KB=16384 字节,100 字节仅占 0.6% 左右,对扇出数的计算结果(比如 1163)影响微乎其微,简化估算完全不影响量级结论;
  3. InnoDB 版本会有微调:不同 MySQL 版本的页结构可能有小改动,元数据大小会有 ±10 字节的波动,用 “约 100 字节” 是行业内的通用简化表述。

总结

  1. 100 字节是页头、页尾及核心元数据的估算总和,不是精确值;
  2. 这个估算的目的是扣除固定开销,计算页的可用空间,方便推导扇出数;
  3. 因为占比极低,无论精确值是 90 还是 120,都不会改变 “3 层 B + 树支撑千万级数据” 的核心结论。
http://www.jsqmd.com/news/200962/

相关文章:

  • 微型锌空气电池赋能细胞级机器人
  • Meta公司收购人工智能智能体开发商蝴蝶效应
  • 渗透测试入门教程(非常详细),从零基础入门到精通,看完这一篇就够了
  • 千问 vs 豆包,视频下载浏览器插件,按下载量排名
  • PSO优化SVM实现时间序列预测:从理论到实践
  • 完整教程:基于python与Streamlit构建的卫星数据多维可视化分析
  • 百度搜索在企业营销中的实战应用
  • 2.字母异位词分组
  • 苏州汽车零部件等离子清洗机厂家有哪些?
  • 大模型必备技能:RAG技术详解与实战,含学习资料,建议收藏
  • 在transformer架构里面前向传播和反向传播-lora gradient checkpoint 优化
  • 2026年1月国内最大PLC培训机构评测,课程+师资双保障 - 速递信息
  • Android 13源码下载
  • 大模型+MCP=超级AI助手!从入门到实战的全栈工程师必备指南(建议收藏)
  • 闲置支付宝消费券别浪费,回收变现正当时 - 京顺回收
  • 2.9 字段分箱技术详解:连续变量离散化,提升模型效果的关键步骤
  • 全网最全8个AI论文写作软件,专科生轻松搞定毕业论文!
  • 字段口径怎么统一:同名字段/统计口径/历史兼容(附口径文档模板)
  • 【必藏】RAG技术全解析:让大模型告别“胡说八道“,企业级AI知识库构建实战指南
  • 从局域网到随处可用:cpolar让Leanote 用户的真实体验升级
  • Java面试也太卷了!投100份简历3个面试,2026年春招有希望吗?如何快速突击?
  • 【必藏】大模型技术全栈指南:从Transformer到智能体设计的完整路径
  • 1.41 RAG核心原理深度解析:检索增强生成,让AI拥有长期记忆
  • 2.10 分类策略制定实战:针对不同分类,制定差异化业务策略
  • IoTDB 扩展技巧 - 详解
  • 1.47 RAG质量提升实战:5大常见问题及解决方案,让检索更精准
  • 1.42 RAG完整流程详解:从文档处理到答案生成,5步构建知识库系统
  • 【收藏必备】从零开始掌握提示词工程:5大核心原则+实战案例,小白也能写出高质量提示词
  • 1.43 NativeRAG实战:无需复杂框架,用Python实现基础RAG系统
  • 收藏这篇!35+程序员如何在大模型时代重获竞争优势:从“搬砖工“到“架构师“的蜕变指南