B 樹和 B+樹的區別, 為什麼 MySQL 要使用 B+樹

qq_79856539發表於2020-11-25

B 樹:
(1) 關鍵字集合分佈在整顆樹中;
(2) 任何一個關鍵字出現且只出現在一個結點中;
(3) 搜尋有可能在非葉子結點結束;
(4) 其搜尋效能等價於在關鍵字全集內做一次二分查詢;
B+樹:
(1) 有 n 棵子樹的非葉子結點中含有 n 個關鍵字( b 樹是 n-1 個) , 這些關鍵字不保
存資料, 只用來索引, 所有資料都儲存在葉子節點(b 樹是每個關鍵字都儲存資料) ;
(2) 所有的葉子結點中包含了全部關鍵字的資訊, 及指向含這些關鍵字記錄的指標,
且葉子結點本身依關鍵字的大小自小而大順序連結;
(3) 所有的非葉子結點可以看成是索引部分, 結點中僅含其子樹中的最大(或最小)
關鍵字;
( 4) 通常在 b+樹上有兩個頭指標, 一個指向根結點, 一個指向關鍵字最小的葉子結
點;
( 5) 同一個數字會在不同節點中重複出現, 根節點的最大元素就是 b+樹的最大元
素。
B+樹相比於 B 樹的查詢優勢:
( 1) B+樹的中間節點不儲存資料, 所以磁碟頁能容納更多節點元素, 更“矮胖”;
( 2) B+樹查詢必須查詢到葉子節點, B 樹只要匹配到即可不用管元素位置, 因此 B+
樹查詢更穩定( 並不慢) ;
( 3) 對於範圍查詢來說, B+樹只需遍歷葉子節點連結串列即可, B 樹卻需要重複地中序遍

 

相關文章