B+樹的簡單介紹

前言

博客編寫人:Willam
博客編寫時間:2017/3/28
博主郵箱:2930526477@qq.com(有志同道合之人,可以加qq交流交流編程心得)

1、B+樹的介紹

B+樹是B-樹的變體,也是一種多路搜索樹:
其定義基本與B-樹同,除了:

  1. 有n顆子樹的結點中含有n個關鍵字
  2. 所有的葉子結點中包含了全部關鍵字的信息,以及指向包含這些關鍵字記錄的指針,且葉子結點本身依關鍵字的大小自小而大順序鏈接
  3. 所有的非終端結點可以看成索引部分,結點中僅含有其子樹(根結點)中最大(或最小)關鍵字。

如下圖所示,就是一個B+樹
這裏寫圖片描述

  1. 根結點只有1個,分支數量範圍[2,m]。
  2. 除根以外的非葉子結點,每個結點包含分支數範圍[[m/2],m],其中[m/2]表示取大於m/2的最小整數。
  3. 所有非葉子節點的關鍵字數目等於它的分支數量
  4. 所有葉子節點都在同一層,且關鍵字數目範圍是[[m/2],m],其中[m/2]表示取大於m/2的最小整數。
  5. 所有非葉子節點的關鍵字可以看成是索引部分,這些索引等於其子樹(根結點)中的最大(或最小)關鍵
    字。例如一個非葉子節點包含信息: (n,A0,K0, A1,K1,……,Kn,An),其中Ki爲關鍵字,Ai爲指向子樹根結點的指針,n表示關鍵字個數。即Ai所指子樹中的關鍵字均小於或等於Ki,而Ai+1所指的關鍵字均大於Ki(i=1,2,……,n)。

  6. 葉子節點包含全部關鍵字的信息(非葉子節點只包含索引),且葉子結點中的所有關鍵字依照大小順序鏈接(所以一個B+樹通常有兩個頭指針,一個是指向根節點的root,另一個是指向最小關鍵字的sqt)。

2、B+樹比B-樹的優勢

下面是B+樹和B-樹的一個對比截圖:(來自:參考文件
這裏寫圖片描述

爲什麼說B+-tree比B 樹更適合實際應用中操作系統的文件索引和數據庫索引?(摘抄自:參考文件

(1)B+-tree的磁盤讀寫代價更低

B+-tree的內部結點並沒有指向關鍵字具體信息的指針。因此其內部結點相對B 樹更小。如果把所有同一內部結點的關
鍵字存放在同一盤塊中,那麼盤塊所能容納的關鍵字數量也越多。一次性讀入內存中的需要查找的關鍵字也就越多。相
對來說IO讀寫次數也就降低了。
    舉個例子,假設磁盤中的一個盤塊容納16bytes,而一個關鍵字2bytes,一個關鍵字具體信息指針2bytes。一棵
    9階B-tree ( 一個結點最多8個關鍵字) 的內部結點需要2個盤快。而B+ 樹內部結點只需要1個盤快。當需要把
    內部結點讀入內存中的時候,B 樹就比B+ 樹多一次盤塊查找時間(在磁盤中就是盤片旋轉的時間)。

(2)B+-tree的查詢效率更加穩定

由於非終結點並不是最終指向文件內容的結點,而只是葉子結點中關鍵字的索引。所以任何關鍵字的查找必須走一條從
根結點到葉子結點的路。所有關鍵字查詢的路徑長度相同,導致每一個數據的查詢效率相當。

好的博客推薦:
https://www.phpsong.com/752.html
https://yq.aliyun.com/articles/9280
http://blog.csdn.net/qq_23217629/article/details/52512041?locationNum=9&fps=1

發佈了70 篇原創文章 · 獲贊 1096 · 訪問量 101萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章