1. 程式人生 > 其它 >Date(2021年12月9日)對於資料結構中B-樹與B+樹的講解

Date(2021年12月9日)對於資料結構中B-樹與B+樹的講解

前言

首先,為什麼要總結B樹、B+樹的知識呢?最近在學習資料庫索引調優相關知識,資料庫系統普遍採用B-/+Tree作為索引結構(例如mysql的InnoDB引擎使用的B+樹),理解不透徹B樹,則無法理解資料庫的索引機制;接下來將用最簡潔直白的內容來了解B樹、B+樹的資料結構
另外,B-樹,即為B樹。因為B樹的原英文名稱為B-tree,而國內很多人喜歡把B-tree譯作B-樹,其實,這是個非常不好的直譯,很容易讓人產生誤解。如人們可能會以為B-樹是一種樹,而B樹又是一種樹。而事實上是,B-tree就是指的B樹,目前理解B的意思為平衡
B樹的出現是為了彌合不同的儲存級別之間的訪問速度上的巨大差異,實現高效的 I/O。平衡二叉樹的查詢效率是非常高的,並可以通過降低樹的深度來提高查詢的效率。但是當資料量非常大,樹的儲存的元素數量是有限的,這樣會導致二叉查詢樹結構由於樹的深度過大而造成磁碟I/O讀寫過於頻繁,進而導致查詢效率低下。另外資料量過大會導致記憶體空間不夠容納平衡二叉樹所有結點的情況。B樹是解決這個問題的很好的結構

概念

首先,B樹不要和二叉樹混淆,在電腦科學中,B樹是一種自平衡樹資料結構,它維護有序資料並允許以對數時間進行搜尋,順序訪問,插入和刪除。B樹是二叉搜尋樹的一般化,因為節點可以有兩個以上的子節點。[1]與其他自平衡二進位制搜尋樹不同,B樹非常適合讀取和寫入相對較大的資料塊(如光碟)的儲存系統。它通常用於資料庫和檔案系統。

定義

B樹是一種平衡的多分樹,通常我們說m階的B樹,它必須滿足如下條件:

  • 每個節點最多隻有m個子節點。
  • 每個非葉子節點(除了根)具有至少⌈ m/2⌉子節點。
  • 如果根不是葉節點,則根至少有兩個子節點。
  • 具有k個子節點的非葉節點包含k -1個鍵。
  • 所有葉子都出現在同一水平,沒有任何資訊(高度一致)
什麼是B樹的階 ?

B樹中一個節點的子節點數目的最大值,用m表示,假如最大值為10,則為10階,

所有節點中,節點【13,16,19】擁有的子節點數目最多,四個子節點(灰色節點),所以可以定義上面的圖片為4階B樹

什麼是根節點 ?

節點【10】即為根節點,特徵:根節點擁有的子節點數量的上限和內部節點相同,如果根節點不是樹中唯一節點的話,至少有倆個子節點(不然就變成單支了)。在m階B樹中(根節點非樹中唯一節點),那麼有關係式2<= M <=m,M為子節點數量;包含的元素數量 1<= K <=m-1,K為元素數量。

什麼是內部節點

稍後補充