1. B+树基础结构与存储原理
B+树是数据库索引中最常用的数据结构之一,它的设计充分考虑了磁盘I/O效率。与普通二叉树不同,B+树具有以下典型特征:
- 多路平衡特性:每个节点可以包含大量子节点指针(通常上百个),保持树的高度始终平衡
- 分层存储结构:分为内部节点(只存索引)和叶子节点(存数据+索引)
- 顺序访问指针:叶子节点通过双向链表连接,支持高效的范围查询
在MySQL的InnoDB引擎中,B+树的每个节点对应一个数据页(page),默认大小为16KB。这个设计源于磁盘存储的最小单位是扇区(通常512B或4KB),而操作系统文件系统的最小I/O单位是块(通常4KB)。16KB的页大小可以确保每次磁盘I/O能读取足够多的有用数据。
关键设计考量:机械硬盘的随机I/O速度比顺序I/O慢几个数量级,B+树通过减少树高度来降低随机I/O次数
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 存储容量计算的核心参数
要准确计算B+树的高度,需要明确以下几个关键参数:
2.1 索引条目大小计算
假设使用Bigint作为主键(8字节),InnoDB的指针固定为6字节(实际可能因版本不同略有变化),则单个索引条目占用空间为:
code复制索引大小 = 键值大小 + 指针大小 = 8B + 6B = 14B
2.2 节点容量计算
每个节点(数据页)默认16KB,可用空间需要扣除页头、页尾等元信息。为简化计算,我们假设全部空间可用于存储索引:
code复制单节点最大索引数 = 页大小 / 索引大小 = 16KB / 14B ≈ 1170
(精确计算:16×1024÷14≈1170.285,取整1170)
2.3 数据记录存储计算
假设每条记录大小为1KB(包含所有列数据),则单个叶子节点可存储:
code复制单页记录数 = 页大小 / 记录大小 = 16KB / 1KB = 16条
3. 树高与存储容量的关系推导
3.1 二层B+树结构
- 根节点:1个索引页,存储最多1170个索引条目
- 叶子层:每个索引指向1个叶子页,共1170个叶子页
- 总容量:1170页 × 16条/页 = 18,720条记录
显然,这远不能满足2000万数据的存储需求。
