sql 数据库采用 b + 树索引,因其在磁盘 i /o、查询稳定性、范围查询和动态更新间实现最优平衡:通过多路分支降低树高以减少 io,自平衡保障等值查询性能稳定,b+ 树更以纯键内节点、有序链表叶节点等设计强化范围查询与 sql 语义支持。

SQL 数据库用 B 树(及其变种 B + 树)做索引,核心原因不是“习惯”或“历史沿袭”,而是它在磁盘 I /O、查询稳定性、范围操作和动态更新之间取得了最务实的平衡。
减少磁盘 IO 次数是首要目标
数据库数据主要存在磁盘上,而磁盘随机读写比内存慢几万倍。B 树(尤其是 B + 树)通过“多路分支”大幅降低树高——比如 10 亿条记录,B+ 树通常只需 3~4 层就能定位,意味着最多 4 次磁盘读取。这背后的关键设计是:每个节点尽量填满一个磁盘页(如 16KB),存下上百个键值,而不是像二叉树那样每层只分两个分支。
所有查询路径长度一致,性能稳定
B 树和 B + 树都是自平衡结构,插入、删除时自动分裂或合并节点,确保任意键的查找都严格走 logₙ(N) 层。这意味着:
- 等值查询(WHERE id = 123)不会因数据分布不均而忽快忽慢
- 没有“退化成链表”的风险,不像未平衡的二叉搜索树
- 执行计划可预测,DBA 和优化器能更可靠地估算成本
B+ 树进一步优化了实际数据库场景
MySQL、PostgreSQL 等主流 SQL 引擎实际用的是 B + 树,而非原始 B 树,因为它针对数据库负载做了关键增强:
- 非叶子节点只存键和指针,不存真实数据 → 同一页容纳更多键 → 树更矮、IO 更少
- 所有数据都在叶子节点,且叶子节点用双向链表连成有序队列 → 范围查询(WHERE age BETWEEN 25 AND 30)只需定位起点,顺序遍历链表,无需反复上下树
- 全量扫描(如 COUNT(*) 或导出)只需遍历叶子层,不用访问内部节点
天然支持常见 SQL 语义
索引不只是加速“=”,更要支撑真实业务中的复杂访问模式:
- ORDER BY + LIMIT:利用 B + 树叶节点的有序链表,直接流式取前 N 条
- LIKE ‘abc%’:前缀匹配可复用 B + 树的有序性,快速定位起始位置
- 联合索引(a,b,c):符合最左前缀原则,本质上是按字典序组织的复合键,B+ 树天然适配






























