参考:https://mp.weixin.qq.com/s/rDCEFzoKHIjyHfI_bsz5Rw
https://mp.weixin.qq.com/s/jRZMMONW3QP43dsDKIV9VQ
问题:怎么从一堆数据中查找某一个数据?
一般我们就会将数据放入红黑树或者堆之中,这些都是基于二叉搜索树,查找、删除、修改的时间复杂度都为O(logn)。这样做的前提是数据都能放入内存中,数据量比较小。当数据库中存储的数据量特别大时,我们不仅要考虑到与树中结点作比较所消耗的时间,还要考虑因内存不足从磁盘IO的时间,而且对于磁盘IO时间来说,内存比较的时间几乎可以忽略不计。
如果采用二叉搜索树的形式作为索引,最坏情况下,磁盘IO次数等于树的高度。二叉搜索树形状为“瘦高”。为了减少磁盘IO次数,就要将“瘦高”的索引树变得“矮胖”。因而使用多路平衡查找树。
B树(B-树)适用于外查找的树,它是一种平衡的多叉树。
一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树。它或者是空树,或者是满足下列性质的树:
1.根结点至少有两个子女。
2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m
3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m
4.所有的叶子结点都位于同一层。
5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域划分。
B树查找过程:例如查找元素5