B+樹 是一個平衡的二叉搜索樹,它遵循多級索引格式。
- 在B+樹中,葉節點表示實際的數據指針,B+樹確保所有葉節點保持在相同的高度。
- 在B+樹中,葉節點使用鏈錶鏈接,因此,B+樹可以支持隨機訪問以及順序訪問。
B+樹的結構
在B+樹中,每個葉節點與根節點的距離相等。B+樹的順序為n
,其中n
對於每個B+
樹是固定的。
它包含內部節點和葉節點。
內部節點
- B+樹的內部節點可以包含除根節點之外的至少 n/2 個記錄指針。
- 最多,樹的內部節點包含n 個指針。
葉節點
- B+樹的葉節點可以包含至少n/2 個記錄指針和n/2個鍵值。
- 葉節點最多包含
n
個記錄指針和n
個鍵值。 - B+樹的每個葉節點包含一個塊指針P以指向下一個葉節點。
在B+樹中搜索記錄
假設要在下面的B+樹結構中搜索55
。 首先,獲取中間節點,該節點將指向可包含55
的記錄的葉節點。
因此,在中間節點中,將找到50
到75
個節點之間的分支。 然後在最後,重定向到第三個葉節點。這裏DBMS將執行順序搜索以找到55
。
B+樹插入
假設要在下面的結構中插入記錄60
。 它將在55
之後轉到第3
個葉子節點。它是一個平衡樹,並且該樹的葉節點已經滿了,所以不能在那裏插入60
。
在這種情況下,必須要拆分葉節點,以便可以將其插入樹中而不會影響填充因數,平衡和順序。
第3
個葉節點具有值(50,55,60,65,70)
,其當前根節點為50
。在中間拆分樹的葉節點,以便不改變其平衡。 因此,可以將(50,55)
和(60,65,70)
分組為2
個葉節點。
這兩個必須是葉節點,則中間節點不能從50
分支。它應該添加60
,然後有一個指向新葉節點的指針。
這是在有溢出時插入條目的方法。 在正常情況下,很容易找到它所適合的節點,然後將其放在該葉節點中。
B+樹刪除
假設要從上面的例子中刪除60
。 在這種情況下需要從中間節點以及第4葉節點中刪除60
。 如果從中間節點中刪除它,那麼樹將不滿足B+樹的規則。 所以需要修改它以獲得平衡的樹。
從B+樹上方刪除節點60
並重新排列節點後,將顯示如下: