b樹(balance tree)和b+樹應用在資料庫索引,可以認為是m叉的多路平衡查詢樹,但是從理論上講,二叉樹查詢速度和比較次數都是最小的,為什麼不用二叉樹呢?
因為我們要考慮磁碟io的影響,它相對於記憶體來說是很慢的。資料庫索引是儲存在磁碟上的,當資料量大時,就不能把整個索引全部載入到記憶體了,只能逐一載入每乙個磁碟頁(對應索引樹的節點)。所以我們要減少io次數,對於樹來說,io次數就是樹的高度,而「矮胖」就是b樹的特徵之一,它的每個節點最多包含m個孩子,m稱為b樹的階,m的大小取決於磁碟頁的大小。
b+樹其實和b樹是非常相似的,
相同點
根節點至少乙個元素
非根節點元素範圍:m/2 <= k <= m-1
不同點。
b+樹有兩種型別的節點:內部結點(也稱索引結點)和葉子結點。內部節點就是非葉子節 點,內部節點不儲存資料,只儲存索引,資料都儲存在葉子節點。
內部結點中的key都按照從小到大的順序排列,對於內部結點中的乙個key,左樹中的所有 key都小於它,右子樹中的key都大於等於它。葉子結點中的記錄也按照key的大小排列。
每個葉子結點都存有相鄰葉子結點的指標,葉子結點本身依關鍵字的大小自小而大順序鏈結。
父節點存有右孩子的第乙個元素的索引。
b樹與b+樹的區別
其實二者最主要的區別是: (1) b+樹改進了b樹, 讓內結點只作索引使用, 去掉了其中指向data record的指標, 使得每個結點中能夠存放更多的key, 因此能有更大的出度. 這有什麼用? 這樣就意味著存放同樣多的key, 樹的層高能進一步被壓縮, 使得檢索的時間更短. (2)當然了,由於底部的葉子結點是鍊錶形式, 因此也可以實現更方便的順序遍歷, 但是這是比較次要的, 最主要的的還是第(1)點.
這個部落格的**講解很詳細:
紅黑樹,B樹,B 樹,B 樹 理解
紅黑樹rbtree 二叉排序樹 map 就是採用紅黑樹儲存的,紅黑樹 rb tree 是平衡二叉樹,其優點就是樹到葉子節點深度一致,查詢的效率也就一樣,為logn.在實行查詢,插入,刪除的效率都一致,而當是全部靜態資料時,沒有太多優勢,可能採用hash表各合適。hash map是乙個hash tab...
深入理解B 樹與B 樹
在看這篇文章之前,我們回顧一下前面的幾篇關於mysql的文章,應該對你讀下面的文章有所幫助。在介紹b 樹之前,先簡單的介紹一下b樹,這兩種資料結構既有相似之處,也有他們的區別,最後,我們也會對比一下這兩種資料結構的區別。1.1 b樹概念 b樹也稱b 樹,它是一顆多路平衡查詢樹。二叉樹我想大家都不陌生...
B樹(B樹 ,B 樹 ,B 樹)與多叉樹
我們先來看看二叉樹存在的問題 二叉樹的操作 效率較高,但是也存在問題,請看下面的二叉樹 二叉樹需要載入到記憶體的,如果二叉樹的節點少,沒有什麼問題,但是如果二叉樹的節點很多 比如1億 就存在如下問題 問題1 在構建二叉樹時,需要多次進行i o操作 海量資料存在資料庫或檔案中 節點海量,構建二叉樹時,...