資料庫索引結構一般引用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)。
- B樹的“矮胖”結構,節點內容豐富,可降低磁碟IO
- 雖然在每個節點中仍需要對比,但是相對磁碟IO,記憶體中的比較對於效能影響幾乎可以忽略
B+樹結構
B+樹特徵
1.有k個子樹的中間節點包含有k個元素(B樹中是k-1個元素),每個元素不儲存資料,只用來索引,所有資料都儲存在葉子節點。
2.所有的葉子結點中包含了全部元素的資訊,及指向含這些元素記錄的指標,且葉子結點本身依關鍵字的大小自小而大順序連結。
3.所有的中間節點元素都同時存在於子節點,在子節點元素中是最大(或最小)元素。
B+樹與B樹的區別?
- B+樹的子節點中只包含索引,不包含資料指標,B樹結構中包含;導致B+樹相對,每個節點包含的資訊更加多,相對B樹結構更加矮胖,磁碟IO次數更少
- B+樹的葉子節點還包括了下一個葉子節點指標,利於範圍查詢
- B+樹的指標資訊都包含在葉子節點中,所以B+樹查詢效能穩定;B-樹當查詢到中間節點時,效能更優