登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
【面试题】MySQL 三层 B+ 树能存多少数据? ...
【面试题】MySQL 三层 B+ 树能存多少数据?
[ 复制链接 ]
乳杂丫
6 天前
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,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
992
吟氅
2025-12-30
业界
字符编码知多少(一)
0
760
欧阳雪枫
2025-12-31
业界
对线面试官系列:MySQL 事务隔离级别
3
499
孜稞
2026-01-01
业界
对线面试官系列:搞懂MySQL 回表机制,看这一篇就够了!
2
1027
尹心菱
2026-01-02
安全
MySQL 5.7.x版本修改字符集(Win11环境)
0
53
苗嘉惠
2026-01-05
业界
【面试题】为什么 MySQL 选择使用 B+ 树作为索引结构?
0
131
赐度虻
2026-01-06
业界
【面试题】RabbitMQ 中无法路由的消息会去到哪里?
0
605
东郭欣然
2026-01-06
业界
【面试题】如何使用 MySQL 的 EXPLAIN 语句进行查询分析?
0
285
辖瑁地
2026-01-08
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
乳杂丫
6 天前
关注
0
粉丝关注
14
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994891
kk14977
6845358
4
xiangqian
638210
5
韶又彤
9992
6
宋子
9977
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9945
查看更多
今日好文热榜
17
PDF 转 Markdown 神器:MinerU 2.5 (1.2B)
328
彻底弄懂KeepAlive
926
听说C++好像偷偷去练什么"绝世武功"去了
527
C++小白训练第二天
809
从文本到画面:AI生图 + 图生视频 Prompt
499
程序员接单群:2026世界杯赛事相关软件开发
76
FFmpeg开发笔记(九十八)基于FFmpeg的跨平
620
从Java到AI:我的转型之路 Ⅰ
919
【节点】[Channel-Split节点]原理解析与实
44
.NET 10 New feature 新增功能介绍-Minimal
329
ida + Cherry Studio使用AI根据指令分析二
570
大模型榜单周报(2026/01/10)
635
批量漏洞挖掘思路
91
AtCoder Beginner Contest 440 题解
762
Python uv 简明教程
200
XAML Studio 已正式开源
313
某it培训机构前端三阶段react及新增面试题
98
运维必备!一款全平台可用的服务器管理利器
613
运维必备!一款全平台可用的服务器管理利器
325
运维必备!一款全平台可用的服务器管理利器