MySQL之B-tree學習

541732025發表於2013-07-30

MySQL之B-tree學習

一,B tree定義:
B-樹是一種平衡的多路查詢樹,它在中很有用,一棵m階B樹滿足下列性質:
1,節點:
a,每個節點最多可以有m個子節點
b,根節點若非葉子節點,至少2個子節點,最多m個子節點
c,每個非根,非葉子節點至少[m/2]子節點或叫子樹([]表示向上取整),最多m個子節點

2,關鍵字:
a,根節點的關鍵字個數1~m-1
b,非根非葉子節點的關鍵字個數[m/2]-1~m-1

3、所有的葉子結點都位於同一層

4、每個結點中關鍵字從小到大排列

5,葉子結點不包含關鍵字

6,效能分析:
設B-樹包含N個關鍵字,因此有N+1個葉子結點,葉子都在第L層。因為根至少有兩個孩子,因此第二層至少有2個結點。除根和葉子外,其它結點至少有┌m/2┐個孩子,因此在第三層至少有2*┌m/2┐個結點,在第四層至少有2*(┌m/2┐^2)個結點,...,在第L層至少有2*(┌m/2┐^(L-2) )個結點,於是有:
N+1 ≥ 2*┌m/2┐^(L-2)
即: L ≤ log┌m/2┐((N+1)/2 )+2
這個公式保證了B-樹的查詢效率是相當高的。

如果要計算資料檢索時間複雜度的話,還得考慮每個節點進行關鍵字的查詢(二分法)

一般資料庫採用的是b-tree的變體:b+tree
和b-tree相比,區別在於:
1,每個節點關鍵字個數和子節點個數相等。
2,b+tree的每個非葉子節點只有key,沒有data,而且葉子節點沒有指標。
一般資料庫會對b+tree進行最佳化,比如在葉子節點上增加了順序訪問指標,提高區間查詢效率

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28912557/viewspace-767504/,如需轉載,請註明出處,否則將追究法律責任。

相關文章