b樹與b+樹原理解析

B樹原理

b樹(balance tree)和b+樹應用在數據庫索引,可以認爲是m叉的多路平衡查找樹,但是從理論上講,二叉樹查找速度和比較次數都是最小的,爲什麼不用二叉樹呢?
因爲我們要考慮磁盤IO的影響,它相對於內存來說是很慢的。數據庫索引是存儲在磁盤上的,當數據量大時,就不能把整個索引全部加載到內存了,只能逐一加載每一個磁盤頁(對應索引樹的節點)。所以我們要減少IO次數,對於樹來說,IO次數就是樹的高度,而“矮胖”就是b樹的特徵之一,它的每個節點最多包含m個孩子,m稱爲b樹的階,m的大小取決於磁盤頁的大小。

B+樹原理

B+樹其實和B樹是非常相似的,

相同點

根節點至少一個元素
非根節點元素範圍:m/2 <= k <= m-1

不同點。

B+樹有兩種類型的節點:內部結點(也稱索引結點)和葉子結點。內部節點就是非葉子節    點,內部節點不存儲數據,只存儲索引,數據都存儲在葉子節點。
內部結點中的key都按照從小到大的順序排列,對於內部結點中的一個key,左樹中的所有    key都小於它,右子樹中的key都大於等於它。葉子結點中的記錄也按照key的大小排列。
每個葉子結點都存有相鄰葉子結點的指針,葉子結點本身依關鍵字的大小自小而大順序鏈接。
父節點存有右孩子的第一個元素的索引。

B樹與B+樹的區別

其實二者最主要的區別是: (1) B+樹改進了B樹, 讓內結點只作索引使用, 去掉了其中指向data record的指針, 使得每個結點中能夠存放更多的key, 因此能有更大的出度. 這有什麼用? 這樣就意味着存放同樣多的key, 樹的層高能進一步被壓縮, 使得檢索的時間更短. (2)當然了,由於底部的葉子結點是鏈表形式, 因此也可以實現更方便的順序遍歷, 但是這是比較次要的, 最主要的的還是第(1)點.

這個博客的圖文講解很詳細:
https://blog.csdn.net/qq_29373285/article/details/88610654

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