B樹
B樹(也稱B-tree,B-樹)特點:
- B樹的階:節點的最多子節點個數
- B-樹的搜索,從根結點開始,對結點內的關鍵字(有序)序列進行二分查找,如果命中則結束,否則進入查詢關鍵字所屬範圍的子結點;重複,直到所對應的子指針爲空,或已經是葉子結點
- 關鍵字集合分佈在整顆樹中, 即葉子節點和非葉子節點都存放數據
- 搜索有可能在非葉子結點結束
- 其搜索性能等價於在關鍵字全集內做一次二分查找
B+樹
B+樹是B樹的變體,也是一種多路搜索樹。特點:
- B+樹的搜索與B樹也基本相同,區別是B+樹只有達到葉子結點才命中(B樹可以在非葉子結點命中),其性能也等價於在關鍵字全集做一次二分查找
- 所有關鍵字都出現在葉子結點的鏈表中(即數據只能在葉子節點【也叫稠密索引】),且鏈表中的關鍵字(數據)恰好是有序的
- 不可能在非葉子結點命中
- 非葉子結點相當於是葉子結點的索引(稀疏索引),葉子結點相當於是存儲(關鍵字)數據的數據層
- 更適合文件索引系統
- B樹和B+樹各有自己的應用場景,不能說B+樹完全比B樹好,反之亦然
B*樹
B*樹是B+樹的變體,在B+樹的非根和非葉子結點再增加指向兄弟的指針。特點:
- B*樹定義了非葉子結點關鍵字個數至少爲(2/3)*M,即塊的最低使用率爲2/3,而B+樹的塊的最低使用率爲B+樹的1/2
- 從第1個特點我們可以看出,B*樹分配新結點的概率比B+樹要低,空間使用率更高
文件系統及數據庫系統的設計者利用了磁盤預讀原理,將一個節點的大小設爲等於一個頁(頁得大小通常爲4k),這樣每個節點只需要一次I/O就可以完全載入。將樹的度M設置爲1024,在600億個元素中最多隻需要4次I/O操作就可以讀取到想要的元素, B樹(B+)廣泛應用於文件存儲系統以及數據庫系統中