1. 程式人生 > >資料結構—B樹、B+樹

資料結構—B樹、B+樹

B樹、B+樹一般用於資料庫索引以及用於MongoDB。

在大型系統中資料庫中的索引量通常都有好幾G,如果使用二叉查詢樹太過於吃記憶體。
從演算法的角度來講,二叉查詢樹的演算法複雜度可能會更低,但由於需要將索引載入到記憶體上進行操作,如果是普通的BST則會因為頻繁的IO操作而損耗大量的效能。
相比於BST的“瘦高”結構,B、B+樹更像是一個矮胖子。它們允許一個根節點下有多個子節點,而且每個子節點中可以包含多個值。

B樹和B+樹的區別在於:
1、B樹每個中間節點都帶有衛星資料,即不僅僅是索引,還包括了索引的值,而B+樹則是隻有在葉子節點才有衛星資料;
2、由於B+樹所有的中間節點只是索引,資料量會更小,在查詢過程中記憶體可以載入的磁碟頁更大,因此整棵樹可以更加“矮胖”;
3、B樹的效能是不穩定的,因為只要找到目標節點即可返回(因為節點都帶有衛星資料),目標節點正好為根節點時效能最佳,為葉子節點則效能最低;而B+樹必須找到葉子節點,效能是穩定的;
4、B+樹的葉子節點實現了一個連結串列,因此遍歷目標資料時只需遍歷列表即可,便於範圍查詢。B+樹的葉子節點包含所有的中間節點資訊。