1. 程式人生 > >深入理解B樹和B+樹(二)B+樹的優點

深入理解B樹和B+樹(二)B+樹的優點

有了B樹,為什麼還需要B+樹呢?那就要先說下B樹的缺點了,人類對於效能的追求是無止境的,B樹相比二叉樹雖好,但還是存在以下問題:

       1.每個節點中既要存索引資訊,又要存其對應的資料,如果資料很大,那麼當樹的體量很大時,每次讀到記憶體中的樹的資訊就會不太夠。

       2.B樹遍歷整個樹的過程和二叉樹本質上是一樣的,B樹相對二叉樹雖然提高了磁碟IO效能,但並沒有解決遍歷元素效率低下的問題。

       針對以上兩個問題,B+樹誕生了,B+樹相比B樹,本質上是一樣的,區別就在與B+樹的所有根節點都不帶有任何資料資訊,只有索引資訊,所有資料資訊全部儲存在葉子節點裡,這樣,整個樹的每個節點所佔的記憶體空間就變小了,讀到記憶體中的索引資訊就會更多一些,相當於減少了磁碟IO次數,問題1就得到了解決。又由B樹的性質可以得到,所有葉子節點都會在同一層,B+樹會以一個連結串列的形式將所有葉子節點的資訊全部串聯起來,這樣,想遍歷所有資料資訊只需要順序遍歷葉子節點就可以了,方便又高效,問題二就得到了解決。不僅如此,B+樹還有一個相應的優質特性,就是B+樹的查詢效率是非常穩定的,因為所有資訊都儲存在了葉子節點裡面,從根節點到所有葉子節點的路徑是相同的。那麼,我們總結一下B+樹的優點:

       (1) B+樹的磁碟讀寫代價更低

              B+的內部結點並沒有指向關鍵字具體資訊的指標。因此其內部結點相對B樹更小。如果把所有同一內部             結點的關鍵字存放在同一盤塊中,那麼盤塊所能容納的關鍵字數量也越多。一次性讀入記憶體中的需要查詢的           關鍵字也就越多。相對來說IO讀寫次數也就降低了。

       (2)B+樹的資料資訊遍歷更加方便

                B+樹只要遍歷葉子節點就可以實現整棵樹的遍歷,而B樹不支援這樣的操作(或者說效率太低),而且            在資料庫中基於範圍的查詢是非常頻繁的,所以資料庫索引基本採用B+樹


       (3) B+樹的查詢效率更加穩定

              由於非終結點並不是最終指向檔案內容的結點,而只是葉子結點中關鍵字的索引。所以任何關鍵字的查             找必須走一條從根結點到葉子結點的路。所有關鍵字查詢的路徑長度相同,導致每一個數據的查詢效率相               當。