1. 程式人生 > >B樹和B+樹(非常重要)

B樹和B+樹(非常重要)

B樹,又稱為多路平衡查詢樹,B樹中所有結點的孩子結點樹的最大值稱為B樹的階,通常用m表示

一棵m階B樹滿足以下性質:

1 樹中每個結點至多有m棵子樹(至多含有m-1個關鍵字)

2 若根結點不是終端結點,則至少有兩棵子樹

3 除根結點外,所有非葉結點至少有  m/2  棵子樹

B樹和B+樹的區別:

B+樹和B樹相比,主要的不同點在以下3項:

  • 內部節點中,關鍵字的個數與其子樹的個數相同,不像B樹種,子樹的個數總比關鍵字個數多1個
  • 所有指向檔案的關鍵字及其指標都在葉子節點中,不像B樹,有的指向檔案的關鍵字是在內部節點中。換句話說,B+樹中,內部節點僅僅起到索引的作用,
  • 在搜尋過程中,如果查詢和內部節點的關鍵字一致,那麼搜尋過程不停止,而是繼續向下搜尋這個分支。

根據B+樹的結構,我們可以發現B+樹相比於B樹,在檔案系統,資料庫系統當中,更有優勢,原因如下:

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

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

  3. B+樹更有利於對資料庫的掃描 
    B樹在提高了磁碟IO效能的同時並沒有解決元素遍歷的效率低下的問題,而B+樹只需要遍歷葉子節點就可以解決對全部關鍵字資訊的掃描,所以對於資料庫中頻繁使用的range query,B+樹有著更高的效能。

參考部落格: