多路平衡查找树(B Tree)(分裂、合并)
Balanced Tree
這個就是我們的多路平衡查找樹,叫做B Tree(B 代表平衡)
跟AVL 樹一樣,B 樹在枝節點和葉子節點存儲鍵值、數據地址、節點引用。
它有一個特點:分叉數(路數)永遠比關鍵字數多1。比如我們畫的這棵樹,每個節點存儲兩個關鍵字,那么就會有三個指針指向三個子節點。
?B Tree 的查找規則是什么樣的呢?
比如我們要在這張表里面查找15。
因為15 小于17,走左邊。
因為15 大于12,走右邊。
在磁盤塊7 里面就找到了15,只用了3 次IO。
這個是不是比AVL 樹效率更高呢?
那B Tree 又是怎么實現一個節點存儲多個關鍵字,還保持平衡的呢?跟AVL 樹有什么區別?
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
比如Max Degree(路數)是3 的時候,我們插入數據1、2、3,在插入3 的時候,本來應該在第一個磁盤塊,但是如果一個節點有三個關鍵字的時候,意味著有4 個指針,子節點會變成4 路,所以這個時候必須進行分裂。把中間的數據2 提上去,把1 和3 變成2 的子節點。
如果刪除節點,會有相反的合并的操作。
注意這里是分裂和合并,跟AVL 樹的左旋和右旋是不一樣的。
我們繼續插入4 和5,B Tree 又會出現分裂和合并的操作。
從這個里面我們也能看到,在更新索引的時候會有大量的索引的結構的調整,所以解釋了為什么我們不要在頻繁更新的列上建索引,或者為什么不要更新主鍵。
節點的分裂和合并,其實就是InnoDB 頁的分裂和合并。
?
總結
以上是生活随笔為你收集整理的多路平衡查找树(B Tree)(分裂、合并)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 平衡二叉树(AVL Tree)(左旋、右
- 下一篇: B+树(加强版多路平衡查找树)