1. B树与B+树的前世今生
在数据库系统的演进历程中,索引结构的选择始终是核心问题。1970年,Rudolf Bayer和Edward M. McCreight在波音实验室首次提出了B树结构,这种平衡多路搜索树完美解决了磁盘存储时代的数据检索难题。而B+树作为其变种,在1973年由Douglas Comer首次系统描述,如今已成为现代数据库的事实标准。
有趣的是,B树的"B"并非代表"Binary"(二叉),而是源自发明者工作地点"Boeing"的首字母。这个命名细节常被误解。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 结构差异:设计哲学的根本分歧
2.1 B树的存储哲学
B树采用"全节点存储"策略,每个节点包含键值对(key-data pairs)。以3阶B树为例:
code复制 [P1:50, D1]
/ | \
[P2:30,D2] [P3:40,D3] [P4:70,D4]
- 内部节点同时存储索引键和实际数据
- 数据可能分布在任意层级节点
- 查询可能在非叶子节点提前终止
这种设计带来两个显著特点:
- 节点大小固定(通常与磁盘块大小对齐)
- 每个节点的有效载荷包含数据和索引
2.2 B+树的存储优化
B+树采用"索引-数据分离"架构:
code复制 [50]
/ \
[30] [60]
/ \ / \
[10,20,30] [40,50,60] ← 叶子节点链表
关键特征:
- 内部节点仅作导航(纯索引)
- 所有数据存储在叶子节点
- 叶子节点通过双向指针连接
这种分离设计带来了惊人的空间效率:
- 4KB磁盘页示例:
- B树节点:约存储3个(key+data)对(假设key 8B + data 1KB)
- B+树内部节点:可存约500个key(8B key + 8B指针)
3. 性能对比:六大维度深度解析
3.1 查询效率对比
单点查询
- B树理论优势:可能在非叶子节点命中(平均减少1次I/O)
- 现实情况:
- 现代数据库B+树高度通常为3-4层
- 更大的扇出可能抵消层级差异
- 实测差异<5%(百万级数据测试)
范围查询
B+树的
