數據庫索引B-樹和B+樹

一開始學習數據結構的時候,主要學習的是數組,隊列,鏈表,隊列,棧,樹這些數據結構,其中樹主要學習二叉樹,平衡二叉樹,二叉搜索樹等這些子節點最多隻有兩個的樹結構。但是,當我們接觸數據庫的時候,你會發現數據庫的索引基本都是B+樹,尤其以數據庫MySql爲甚。那麼學習的時候我們碰到B樹,B+樹,那麼他們結構是什麼樣的,有什麼區別,能用在什麼地方呢?

什麼是B樹,B+樹

B也就是Balance的意思。B樹是一種多路搜索樹,它的任意非葉子結點最多隻有M個兒子,且M>2,它的每個節點不僅存儲關鍵字,還存儲數值。B+樹也是一種多路搜索樹,它的任意非葉子結點最多隻有M個兒子,且M>2,它的每個節點只存儲關鍵字,所有的數值放在非葉子節點上,並且所有的非葉子節點以鏈表的形式鏈接起來。(注意:B樹和B-樹是一回事,B-樹是英語寫法,連接符,二叉排序樹是叫Binary Search Tree(BST),)
二叉搜索樹有大量的技術人員在網上寫出了具體的結構,實現形式,在此我就不多說了,你們可以參看。
下面我主要講講B-樹和B+樹,在講之前,我們先來看看m-way查找樹。

m-way查找樹:

m-way查找樹是是一種樹形的存儲結構,主要特點如下:

  • 每個節點存儲的key數量小於m個
  • 每個節點的度小於等於m(樹的度:非葉子節點含有的最大子節點數)
  • 節點中的key按順序大小排序
  • 子樹key值要完全小於、大於或介於父節點之間

舉例:
3-way如下圖所示,m爲3,那麼每個節點最多擁有爲2個key(m-1)。
其中,待索引元素列表爲:[5, 7, 12, 6, 8, 3, 4]
這裏寫圖片描述

B-Tree查找樹

B-Tree是一種平衡的m-way查找樹,它可以利用多個分支節點(子樹節點)來減少查詢數據時所經歷的節點數,從而達到節省存取時間的目的。
B查找樹主要特點如下:
(其中ceil(x)是一個取上限的函數)

  • 每個節點的key數量小於m個
  • 每個節點的度小於等於m
  • 除根節點和葉子節點的其他節點存儲key的個數必須大於等於ceil(m/2)
  • 若根結點不是葉子結點,則至少有2個孩子(特殊情況:沒有孩子的根結點,即根結點爲葉子結點,整棵樹只有一個根節點)
  • 每個葉子節點最少包含一個key和兩個指針,最多包含m-1個key和m個指針,葉節點的指針均爲null 。
  • 所有葉子節點都處於同一層,也就是說所有葉節點具有相同的深度h(樹的高度,也意味着樹是平衡的)

B-Tree示意圖如下:
這裏寫圖片描述
由於B-Tree的特性,在B-Tree中按key檢索數據的算法非常直觀:首先從根節點進行二分查找,如果找到則返回對應節點的data,否則對相應區間的指針指向的節點遞歸進行查找,直到找到節點或找到null指針,前者查找成功,後者查找失敗。

B+樹

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章