最小度
概述
最小度 是B树的核心参数,控制每个节点的关键字数量范围和分支因子。最小度 越大,B树越”矮胖”,高度越低,磁盘I/O次数越少;但单次磁盘读取的数据量也越大。选择合适的 是B树工程实现的关键。
定义
最小度
一棵B树的最小度 (minimum degree)是一个整数,满足 。它决定了B树节点的关键字数量和子树数量的上下界:
属性 根节点 非根内部节点 叶子节点 最少关键字数 (不携带信息) 最多关键字数 最少子树数 最多子树数
关键字数量范围
对于任意非根节点 ,设其关键字数为 ,则:
对于根节点 (树非空时):
子树数量范围
对于任意内部节点 ,设其子树数为 ,则:
因此:
核心性质
1. 最小度与节点”满”的定义
- 一个节点被称为满的(full),当且仅当它恰好包含 个关键字
- 满节点无法再插入新关键字,必须通过分裂操作(见B树的插入操作)来处理
2. 最小度与下溢
- 一个非根节点被称为发生下溢(underflow),当且仅当它的关键字数少于
- 下溢必须通过借关键字或合并操作(见B树的删除操作)来修复
3. 最小度与树高度的关系
由B树高度定理,最小度 直接决定了B树高度的上界:
越大,对数底数越大,高度上界越低。
与阶数 的关系
在一些教材和工程文献中,B树使用阶数 (order)而非最小度 来定义。两者的对应关系为:
即一棵 阶B树等价于最小度 的B树。
| 阶数 | 最小度 | 最多关键字数 | 最多子树数 |
|---|---|---|---|
| 3 | 2 | 3 | 4 |
| 4 | 2 | 3 | 4 |
| 5 | 3 | 5 | 6 |
| 100 | 50 | 99 | 100 |
| 200 | 100 | 199 | 200 |
注意
CLRS采用最小度 的定义方式,而部分国内教材采用阶数 的定义方式。阅读不同文献时需注意区分,两者本质描述的是同一结构。
最小度的工程选择
在实际数据库系统中,最小度 的选择取决于磁盘页大小:
- 磁盘页大小通常为 4KB 或 16KB
- 每个B树节点应恰好填满一个磁盘页
- 越大 树越矮 I/O次数越少
- 但 过大 节点内线性搜索变慢
典型值:MySQL InnoDB 使用 16KB 页,每个节点约可存储数百到上千个索引项。