🌳 什么是 B树 和 B+树?
它们都是多路平衡查找树(M-Way Search Tree),用于提升磁盘读写效率,常用于数据库(如 MySQL)、操作系统中的索引结构。
🔍 B树 和 B+树 的核心区别一览
特性 | B 树 | B+ 树 |
---|---|---|
数据存储位置 | 所有节点都存数据(根、内、叶) | 只有叶子节点存数据 |
内部节点内容 | 关键字 + 数据 | 只有关键字(不含实际数据) |
叶子节点是否链表 | ❌ 否 | ✅ 是(叶子节点组成有序链表) |
查询效率 | 查询速度不稳定,深度少但每层含数据 | 查询稳定,需走到底但结构更简单 |
范围查询 | 需遍历整棵树 | ✅ 非常高效,直接链表顺序查 |
磁盘读取次数 | 较少,但不规律 | 稍多,但更适合磁盘块优化 |
典型应用 | 较少见,早期数据库 | ✅ MySQL(InnoDB)、Linux 文件系统等 |
📌 形象理解
🟩 B树结构:
[ 10 | 20 ]/ | \[5] [15] [25]/ | \数据 数据 数据 (所有节点都存数据)
🟦 B+树结构:
[10 | 20]/ | \[5] [15] [25] <-- 只有关键字| | |[数据]→[数据]→[数据] (叶子节点链表)
🔥 为什么数据库几乎都用 B+ 树?
- 所有数据都在叶子节点,结构更统一,便于范围查找
- 叶子节点链表 → 范围查询效率极高
- 磁盘读取更高效:内部节点更“轻”,一页能装更多 key,树更矮,访问路径更短
- 支持顺序遍历:天然有序,分页、between 查询非常友好
✅ 一句话总结
B 树适合内存查找结构,B+ 树更适合磁盘和数据库,因为它只在叶子节点存数据、结构更稳定、查询更高效。