什么是B树、什么是B+树
B树是一种自平衡的多路搜索树数据结构,可以存储大量数据。多路树表示每一个节点可能会有许多的子节点,因此,它的整个高度会相比二叉树来说,会矮很多。
B+ 树是 B 树的一种变种,其所有的键值对都保存在叶子节点中,并且叶子节点之间通过链表相连。这使得 B+ 树非常适合范围查询和顺序访问。
为什么MySQL默认为B+树
对于数据库而言,所有的数据都将会保存到磁盘上,而磁盘I/O的效率又比较低,而
高度又决定了磁盘I/O的次数,磁盘I/O次数越少,对于性能的提升就越大,这也是为什么采用B树作为索引存储结构的原因。
选择B+而不是B树的原因有以下几点:
B+ | B | |
范围查询的效率 | B+ 树的叶子节点通过链表相连,这使得范围查询非常高效。对于范围查询(例如查找某个区间内的记录),可以通过遍历叶子节点链表来快速找到所有符合条件的数据。这种特性在需要顺序访问数据时特别有用 | 在 B 树中,范围查询的效率较低,因为叶子节点不连接,可能需要更多的访问和查找操作来完成范围查询 |
缓存 | 由于 B+ 树的非叶子节点中只存索引信息,非叶子节点通常较小且高度较低。所以B+ 树更适合在内存中缓存,并减少磁盘 I/O 操作。叶子节点包含了所有数据,因此在查询时,B+ 树能够更好地利用缓存,提升性能 | B 树的每个节点可能包含更多的数据和子节点,这可能导致较高的树高度和较低的缓存效率 |
插入和删除操作 | 在 B+ 树中,所有的插入和删除操作主要发生在叶子节点,而非叶子节点主要用于索引。这使得插入和删除操作在 B+ 树中相对简单,并且树的平衡性较容易保持 | B 树的插入和删除操作可能涉及非叶子节点和叶子节点的平衡,处理起来更加复杂 |
支持大数据集 | B+ 树能够有效支持大规模数据集,因为它的叶子节点按顺序链接,可以方便地进行分页和顺序访问。对于大规模的数据集,B+ 树能够保持较低的树高度,提高数据访问的效率 | 虽然 B 树也能处理大数据集,但在处理范围查询和顺序访问时不如 B+ 树高效 |