1. B+树基础结构与存储原理
在MySQL的InnoDB存储引擎中,B+树是最核心的索引数据结构。理解B+树的三层结构如何存储数据,需要先掌握几个关键概念:
B+树由根节点、非叶子节点(中间节点)和叶子节点组成。三层B+树意味着:
- 第1层:根节点(Root)
- 第2层:非叶子节点(Intermediate)
- 第3层:叶子节点(Leaf)
每个节点的大小固定为16KB(InnoDB默认页大小)。节点中包含两种关键数据:
- 键值(Key):用于索引定位
- 指针(Pointer):指向下一级节点或实际数据
在叶子节点层,所有节点通过双向链表连接,这是B+树支持高效范围查询的关键设计。
注意:InnoDB中主键索引的叶子节点直接存储行数据(聚簇索引),而二级索引的叶子节点存储主键值。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 三层B+树容量计算的关键参数
要准确计算三层B+树的存储容量,需要考虑以下变量:
2.1 主键字段类型
最常见的是BIGINT(8字节)和INT(4字节)。我们以BIGINT为例:
- 主键长度:8字节
- 事务ID指针:6字节
- 回滚指针:7字节
- 每行额外开销:约5字节
- 合计:8 + 6 + 7 + 5 = 26字节/行
2.2 指针大小
在64位系统中,指针通常占6字节(包括页内偏移量等元数据)。
2.3 页填充因子
InnoDB默认页填充率为15/16,即每页实际可用空间:
16KB × (15/16) = 15KB = 15,360字节
2.4 非叶子节点容量计算
非叶子节点只存储键值和指针。假设主键为BIGINT:
- 每个键值对大小:8(Key) + 6(Pointer) = 14字节
- 每页可存储键值对数:15,360 / 14 ≈ 1,097个
- 实际采用保守估计:约1,000个键值对/页
3. 三层B+树的具体容量推算
3.1 根节点容量
根节点作为第一层,存储约1,000个键值对,可以指向1,000个第二层非叶子节点。
3.2 第二层容量
每个第二层非叶子节点同样可以存储约1,000个键值对,指向1,000个叶子节点。
因此,两层非叶子节点可管理:
1,000(根节点) × 1,000(第二层) = 1,000,000个叶子节点
