面试官问:MySQL一颗3层B+树能保存多少数据?

面试官问:MySQL一颗3层B+树能保存多少数据?
最新回答
白首不渝

2026-10-21 23:37:54

一颗3层B+树在MySQL中大约能保存2100万条数据。具体分析如下:

  • 页(Page)结构与可用空间InnoDB存储引擎中,页是磁盘管理的最小单位,默认大小为16KB(16384字节)。扣除页头、页尾等固定开销后,实际可用空间约为16282字节。

  • 非叶子节点(索引页)的存储能力非叶子节点存储索引键值(主键)和指向子节点的指针。以int类型主键(4字节)为例,每个键值+指针的组合占用14字节(4字节键值 + 4字节子节点页号 + 6字节指针)。单个索引页可存储的键值+指针数量为:16282 ÷ 14 ≈ 1163即每层索引页最多包含1163个键值。

  • B+树层数与数据量计算

    第1层(根节点):1个索引页,最多1163个键值,指向1163个子节点。

    第2层(中间索引页):每个根节点键值对应1个子节点,共1163个索引页,每页仍可存储1163个键值,指向1163×1163个数据页。

    第3层(叶子节点/数据页):每个数据页存储完整数据行。若每行数据大小为1KB,则单个数据页可存储16行(16KB ÷ 1KB)。总数据量计算为:1163(第1层键值) × 1163(第2层键值) × 16(第3层每页行数) ≈ 2100万条。

  • 关键假设与限制

    主键为int类型(4字节),若主键更大(如bigint),单个键值+指针占用空间增加,每层索引页存储的键值数量减少,总数据量随之降低。

    数据行大小固定为1KB,实际行大小因字段类型和数量而异,需根据具体表结构调整计算。

    B+树高度为3时,根节点为第1层,中间索引页为第2层,数据页为第3层。若高度定义不同(如根节点为第0层),层数对应需调整。

(图示:3层B+树结构,根节点指向中间索引页,中间索引页再指向叶子数据页)

此计算基于理想情况,实际数据量可能因页填充率、碎片化等因素略有波动,但可作为估算参考。