B树实质是一棵(N-1)-N查找树,N叫做B树的阶,B树延续了二三查找树的本质,将其结点的key进行拓展,我们知道一个结点能够存储更多的key,那么这棵树的高度也就越低,进而查找效率就会高。像咱们B树就不会像红黑树以及二三查找树那么单一,因为一棵B树的阶数一般都会大于100甚至更大,主要用于海量数据的查找,而咱们的...
B树 论文《Organization and maintenance of large ordered indexes》中对 B 树的定义如下。假设 h 为一个大于 0 的整数,k 为一个自然数,如果树 T(k, h) 为空或具有以下 3 个属性则 T 为 B 树: 从根节点到每个叶节点的路径长度都是同一个值 h,h 也称为树 T 的高度。 根节点为叶节点或至少三个...
原因:相对于B树 (1)B+树空间利用率更高,可减少I/O次数,(2)增删文件(节点)时,效率更高,...
特别是聚簇索,因为聚簇索引数据(value)的大小往往比key要大得多,B树的树高度要比B+树高得多,IO次...
从上图可以看出,B树相对于平衡二叉树,每个节点存储了更多的键值(key)和数据(data),并且每个节点拥有更多的子节点,子节点的个数一般称为阶,上述图中的B树为3阶B树,高度也会很低。 基于这个特性,B树查找数据读取磁盘的次数将会很少,数据的查找效率也会比平衡二叉树高很多。
可以想象到二叉树的节点将会非常多,高度也会极其高,我们查找数据时也会进行很多次磁盘 IO,我们查找数据的效率将会极低! 为了解决平衡二叉树的这个弊端,我们应该寻找一种单个节点可以存储多个键值和数据的平衡树。也就是我们接下来要说的 B 树。 B树(Balance Tree)即为平衡树的意思,下图即是一棵 B 树: ...
B树的缺点 每个节点中有key(索引),也有data(对于MyISAM来说是数据的地址,对于InnoDB来说是数据本身),但是每一个节点的存储空间是有限的,data占用较大时,会导致每个节点存储的key就会减少(即树的分支变少),同样会导致B树的高度较大,磁盘IO次数花费增大,效率降低!!!
B树:为磁盘而生 为什么要从AVL树变成B树? 因为内存的易失性。一般情况下,我们都会选择将 user 表中的数据和索引存储在磁盘这种外围设备中。 但是和内存相比,从磁盘中读取数据的速度会慢上百倍千倍甚至万倍,所以,我们应当尽量减少从磁盘中读取数据的次数。
如上左图根节点平衡因子=1,为AVL树;右图根节点平衡因子=2,固非AVL树,只是BST。 为什么选择AVL树而不是BST? 大多数BST操作(如搜索、最大值、最小值、插入、删除等)的时间复杂度为O(h),其中h是BST的高度。对于极端情况下的二叉树,这些操作的成本可能变为O(n)。如果确保每次插入和删除后树的高度都保持O(log...
B树的优化特性使得它更适合应对大规模文件系统的索引需求。通过减少分裂和合并操作的频率,B树能够更有效地维护索引结构。 3.3.2 减少磁盘IO次数 类似于B+树,B树在文件系统中同样能够减少磁盘IO次数。文件系统通常需要频繁地进行查找和检索文件,而B树的平衡性和高度平衡特性使得这一过程更为高效。