B树 vs B+树
核心一句话:B+树只有叶子存数据、非叶子只存索引;B树所有节点都存数据。B+树更适合数据库、文件系统。
1. 节点存储内容(最核心区别)
- B树 :
每个节点(包括非叶子、叶子 )都存 关键字 + 数据/记录 - B+树 :
- 非叶子节点 :只存索引关键字,不存真实数据
- 叶子节点 :存放全部数据记录,且叶子节点链表相连
2. 关键字与子节点关系
- B树:n 个关键字 → n+1 个子节点
- B+树:n 个关键字 → n 个子节点
3. 查找方式
- B树:数据分散在各层,找到即停,可能在非叶子命中
- B+树 :所有查找必须走到叶子节点 ;支持范围查询、全表遍历(顺着叶子链表走)
4. 磁盘IO(数据库重点)
- B+树优势更大 :
非叶子节点更小,一页能存更多索引 ,树更矮,磁盘IO次数更少。
范围查询只遍历叶子链表,效率极高。
5. 应用场景
- B树:文件系统索引(如NTFS)
- B+树:MySQL InnoDB 索引、数据库主流索引结构
标准回答
- B树所有节点都存数据,B+树只有叶子存数据,非叶子只存索引。
- B+树非叶子节点更小,索引密度更高,树高更低,磁盘IO更少。
- B+树叶子节点连成链表,范围查询、排序、全表扫描远快于B树,所以MySQL用B+树。