B+樹全面解析


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-樹

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM