b+树相对于b树优势?

1 个回答

  • 元始大天尊
    忙碌足以冲淡很多复杂的情绪
    # 核心差异 * **B 树**:键和值(记录/指针)可存放在**所有节点**;查找可能在中间节点结束;叶子通常**不联结**。 * **B+ 树**:**内部节点只存键**(与子指针),**所有值都在叶子**;叶子**按序双向链表**连起来。 # 为什么 B+ 树更适合数据库 1. **扇出更大 → 树更矮 → I/O 更少** 内部节点不放值,只放“键+指针”,同一页能塞更多项,树高下降。 例:16KB 页、8B 指针、8B 键,内部节点每项≈16B,扇出≈16KB/16B≈**1K**,1e8 行高度通常 **3\~4 层**。 2. **范围/排序扫描快** 叶子有序且**链表相连**,`BETWEEN/ORDER BY` 直接顺扫叶子即可,顺序读友好、预读命中高,避免大量随机 I/O。 3. **访问代价稳定** 所有查询都在**叶子结束**,路径长度一致;把上层(根/内节点)常驻缓存,命中率更高、抖动更小。 4. **更利于覆盖索引与下推过滤** 叶子可只放“索引列 + 主键/ROWID”,很多查询**无需回表**(覆盖索引);索引条件下推(ICP)也更有效。 5. **并发与维护更友好** 插入/删除主要落在**叶子**,内部节点仅做导航,**锁/闩竞争更小**;批量建树和重组更容易做到顺序写。 6. **重复键与稳定遍历** 叶子层统一存值,自然支持重复键聚集;区间扫描、前驱/后继查找都很直接。 # 可能的“劣势”(但在数据库里影响很小) * **单点查找理论上少一次 I/O 的机会**:B 树若在中间节点命中可提前返回;但实际系统里内节点常在缓存中,这点优势极小,且换来范围扫描极差,不划算。 # 总结 B+ 树用“**内节点只有键、叶子链表化**”换来**更大的扇出、更低的高度、稳定的访问代价和优异的范围扫描性能**,这正符合磁盘/页式存储与数据库工作负载特性,因此主流数据库与文件系统索引几乎清一色采用 B+ 树。
    发布于 2025-08-18 03:41 •IP属地 新疆
    举报
    评论
    收藏