登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
【面试题】MySQL 三层 B+ 树能存多少数据? ...
【面试题】MySQL 三层 B+ 树能存多少数据?
[ 复制链接 ]
乳杂丫
4 天前
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这是一个经典的面试题,但实际估算需要考虑多个变量。下面我将详细拆解计算过程:
核心计算模型
MySQL B+树存储量 = 根节点扇出 × 中间节点扇出 × 叶子节点容量
关键假设(以InnoDB默认配置为例)
页大小
:16KB(16384字节)
主键类型
:BIGINT(8字节)
指针大小
:6字节(InnoDB页指针)
行数据大小
:1KB(1024字节) -
这是关键变量
页空间利用率
:约70%(需扣除页头、页尾等元数据)
三层B+树结构
第1层:根节点(1个)
第2层:中间节点(fan_out个)
第3层:叶子节点(fan_out²个) ← 存储实际数据
复制代码
详细计算步骤
1. 计算单个非叶子节点能存储的键值对数量(fan_out)
每个索引项大小 = 主键(8B) + 指针(6B) = 14B
可用空间 = 16KB × 70% = 11.2KB ≈ 11468字节
单个节点索引项数 = 11468 / 14 ≈
819
即:
每个非叶子节点可指向约819个子节点
2. 计算单个叶子节点能存储的数据行数
可用空间 = 16KB × 70% = 11.2KB
假设每行数据1KB → 每页约存储
11行
假设每行数据200字节 → 每页约存储
57行
假设每行数据800字节 → 每页约存储
14行
3. 三层B+树总容量计算
公式
:总行数 = fan_out² × 每页行数
若每页11行:819² × 11 ≈
730万行
若每页57行:819² × 57 ≈
3800万行
若每页14行:819² × 14 ≈
940万行
更精确的估算(考虑真实InnoDB结构)
实际InnoDB叶子节点存储的是完整数据行,需要考虑:
行格式开销(行头约23字节)
事务系统开销(MVCC的隐藏列:DB_TRX_ID 6B + DB_ROLL_PTR 7B)
可能的NULL位图、变长字段列表等
保守估算
:
假设主键为BIGINT,每行额外开销约50字节:
行大小 = 数据(1024B) + 行开销(50B) = 1074B
每页行数 = (16384×70%) / 1074 ≈ 10行
总行数 = 819² × 10 ≈
670万行
场景分析表
行大小每页行数三层B+树容量四层B+树容量200B(小记录)~57行约3800万行约310亿行1KB(典型记录)~10行约670万行约55亿行2KB(较大记录)~5行约335万行约27亿行8KB(大记录)~1行约67万行约5.5亿行
重要说明
实际容量可能更大
:
若使用INT主键(4字节),fan_out ≈ 1365,容量提升近3倍
若行记录更紧凑,每页存储行数更多
B+树层数增长
:
当数据量超过三层容量时,B+树变为四层
四层B+树容量 = fan_out³ × 每页行数
对于1KB行,四层B+树可存储约
55亿行
聚簇索引 vs 二级索引
:
上述计算针对
聚簇索引
(叶子节点存完整数据)
二级索引叶子节点存储主键值,容量会更大
结论
在典型的配置下(BIGINT主键、1KB行数据):
三层B+树大约能存储600万~1000万行数据
四层B+树可存储数十亿行数据
这也是为什么我们常说:
单表千万级别数据时,查询性能仍能保持良好(三层B+树)
数据量过亿时,可能需要考虑分库分表或优化索引设计
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
试题
MySQL
三层
树能
多少
相关帖子
对线面试官系列:MySQL 常见面试题,你能答对几道?
字符编码知多少(一)
对线面试官系列:MySQL 事务隔离级别
对线面试官系列:搞懂MySQL 回表机制,看这一篇就够了!
MySQL 5.7.x版本修改字符集(Win11环境)
【面试题】为什么 MySQL 选择使用 B+ 树作为索引结构?
【面试题】RabbitMQ 中无法路由的消息会去到哪里?
【面试题】如何使用 MySQL 的 EXPLAIN 语句进行查询分析?
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
对线面试官系列:MySQL 常见面试题,你能答对几道?
0
990
吟氅
2025-12-30
业界
字符编码知多少(一)
0
758
欧阳雪枫
2025-12-31
业界
对线面试官系列:MySQL 事务隔离级别
3
499
孜稞
2026-01-01
业界
对线面试官系列:搞懂MySQL 回表机制,看这一篇就够了!
1
1026
尹心菱
2026-01-02
安全
MySQL 5.7.x版本修改字符集(Win11环境)
0
49
苗嘉惠
2026-01-05
业界
【面试题】为什么 MySQL 选择使用 B+ 树作为索引结构?
0
122
赐度虻
2026-01-06
业界
【面试题】RabbitMQ 中无法路由的消息会去到哪里?
0
597
东郭欣然
2026-01-06
业界
【面试题】如何使用 MySQL 的 EXPLAIN 语句进行查询分析?
0
280
辖瑁地
2026-01-08
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
乳杂丫
4 天前
关注
0
粉丝关注
14
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994891
kk14977
6845358
4
xiangqian
638210
5
韶又彤
9993
6
宋子
9978
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9946
查看更多
今日好文热榜
652
FastAPI依赖注入深度指南:从基础依赖到预
829
举个栗子:做个AI Gateway demo
945
广州旗引科技:以技术创新驱动企业获客升级
702
三维扫描仪环境光会不会影响扫描?环境适应
992
AgentRun 实战:快速构建 AI 舆情实时分析
861
【睿擎派】OPC-UA远程操控S7-1200
123
学中医理疗不只是 “考证上班”:在家给爸
991
3D-AIGC 存储架构演进:从 NFS、GlusterFS
396
报错解决:git clone git@github.com: Perm
312
GLM-4.7 可以平替 Claude Code 的国产编码
341
剑指offer-61、序列化二叉树
466
【节点】[NormalUnpack节点]原理解析与实际
986
盘点2026年全球主流的5款原型设计工具:优
791
2026年邮件群发平台精选推荐
559
定长分块
477
与甄知科技同行,见证数智力量
25
你们的Agent写代码吗?Agent-Sandbox开源首
865
为什么很多伟大的作品都是诞生在一些不起眼
357
欧拉函数
546
【论文精读】当代软件现代化:战略、动力与