B+樹的特征與結構
- 有k個子樹的中間節點包含有k個元素(B樹中是k-1個元素),每個元素不保存數據,只用來索引,所有數據都保存在葉子節點。
- 所有的葉子結點中包含了全部元素的信息,及指向含這些元素記錄的指針,且葉子結點本身依關鍵字的大小自小而大順序鏈接。
- 所有的中間節點元素都同時存在於子節點,在子節點元素中是最大(或最小)元素
從上圖可以看出,不但節點之間含有重復元素,而且葉子結點還用指針連接在一起。這正是B+數的幾個特征,首先,每個元素都出現子節點中,是子節點的最大(或者最小)元素。
在上面這課樹中,根節點元素8是子節點2,5,8的最大元素,也是葉子節點6,8的最大元素。需要注意的是根節點的最大元素(這里是15),也就等同於整個B+樹的最大元素。以后無論插入刪除多少元素,始終保持最大元素在根節點當中。
至於葉子節點,由於父節點的元素都出現在子節點,因此葉子結點包含了全部元素的信息。並且每個葉子節點都帶有指向下一個節點的指針,形成了一個有序鏈表。
B+樹還具有一個重要的特點,這個特點是在索引之外,確實至關重要的特點。那就是【衛星數據】,
所謂衛星數據,指的就是索引元素所指向的數據記錄,比如數據庫中的某一行。在B-樹中,無論是中間節點還是葉子結點都帶有衛星數據,而在B+樹當中,只有葉子節點帶有衛星數據,其余中間節點僅僅是索引,沒有任何數據關聯。
B-樹中的衛星數據(Satellite Information):
B+樹中的衛星數據(Satellite Information):
需要補充的是,在數據庫的聚集索引(Clustered Index)中,葉子節點直接包含衛星數據。在非聚集索引(NonClustered Index)中,葉子節點帶有指向衛星數據的指針。
B+樹的優點
B+樹的好處主要體現在查詢性能上。下面我們可以通過單行查詢和范圍查詢來做分析。
在單元素查詢的時候,B+樹會自頂向下逐層查找節點,最終找到匹配的葉子節點。
第一次磁盤IO
第二次磁盤IO
第三次磁盤IO
優點:
- B+樹的中間節點沒有衛星數據,所以同樣大小的磁盤頁可以容納更多的節點元素,這就意味着在數據量相同的情況下,B+樹更加的矮胖,因此IO的次數也就較少
- B+樹查詢必須查找到葉子節點,每一次查找都是穩定的
B-樹的范圍查找及過程與B+樹對比
自頂向下,查找到范圍的下限(3)
中序遍歷到元素6
中序遍歷到元素8
中序遍歷到元素9
中序遍歷到元素11
B+樹的范圍查找過程
自頂向下,查找到范圍的下限(3)
通過鏈表指針,遍歷到元素6,8
通過鏈表指針,遍歷到元素9,11,遍歷結束
綜合來說
B+樹的優勢:
1.單一節點存儲更多的元素,使得查詢的IO次數更少。
2.所有查詢都要查找到葉子節點,查詢性能穩定。
3.所有葉子節點形成有序鏈表,便於范圍查詢,遠遠高於B-樹