1.结构上
- B树:所有节点都可包含记录。
- B+树:只有叶子节点存储数据,非叶子节点仅用于索引,不存储实际数据(根节点既可以存数据也可以存索引)。相邻叶子节点间有指针指向。
2.增删不同
B+树还要更新维护索引的变化
3.查询性能不同
- B树:相当于对关键字二分查找,范围是1~logmN,距离根节点越近效率越高,涉及到跨层查找,所以在查询时可能需要多次磁盘访问,导致查询性能较低。
- B+树:都是logmN,因为数据都在叶子节点上,而且通过叶子节点形成的链表可以快速定位到范围查询的起始位置,提高了查询性能。此外,B+树非叶子节点不存放数据,相比于B树的非叶子节点来说,所占内存小。磁盘IO的大小是固定的,节点越小,一次IO所能读取到的节点数量就越多。因此B+树单次磁盘IO效率高于B树。
4.使用场景不同
- B树:适用于需要随机访问的场景,比如文件系统索引。
- B+树:适用于范围查询和顺序访问的场景,比如数据库索引。