二叉樹、B樹以及B+樹

Echizen_1發表於2019-01-13


資料庫索引結構一般引用B樹或者索引。

利用樹結構的原因?

  1. 樹結構查詢效率更高
  2. 節點按照順序排列

二叉樹結構

二叉樹、B樹以及B+樹

B樹結構

二叉樹、B樹以及B+樹

一個m階的B樹具有如下幾個特徵:

1.根結點至少有兩個子女。

2.每個中間節點都包含k-1個元素和k個孩子,其中 m/2 <= k <= m

3.每一個葉子節點都包含k-1個元素,其中 m/2 <= k <= m

4.所有的葉子結點都位於同一層。

5.每個節點中的元素從小到大排列,節點當中k-1個元素正好是k個孩子包含的元素的值域分劃。

資料庫索引選用B樹不選用二叉樹原因?

索引儲存在硬碟上,當查詢索引時,不能將索引全部載入到記憶體中,因為索引達到一定數量時,資料量很大,所以需要按照磁碟頁分頁載入查詢,B樹的一個節點即為一個磁碟頁(預設最大為16K)。

  1. B樹的“矮胖”結構,節點內容豐富,可降低磁碟IO
  2. 雖然在每個節點中仍需要對比,但是相對磁碟IO,記憶體中的比較對於效能影響幾乎可以忽略

B+樹結構

二叉樹、B樹以及B+樹

B+樹特徵

1.有k個子樹的中間節點包含有k個元素(B樹中是k-1個元素),每個元素不儲存資料,只用來索引,所有資料都儲存在葉子節點。

2.所有的葉子結點中包含了全部元素的資訊,及指向含這些元素記錄的指標,且葉子結點本身依關鍵字的大小自小而大順序連結。

3.所有的中間節點元素都同時存在於子節點,在子節點元素中是最大(或最小)元素。

B+樹與B樹的區別?

  • B+樹的子節點中只包含索引,不包含資料指標,B樹結構中包含;導致B+樹相對,每個節點包含的資訊更加多,相對B樹結構更加矮胖,磁碟IO次數更少
  • B+樹的葉子節點還包括了下一個葉子節點指標,利於範圍查詢
  • B+樹的指標資訊都包含在葉子節點中,所以B+樹查詢效能穩定;B-樹當查詢到中間節點時,效能更優


相關文章