首先B樹的所有節點都存儲數據信息,而B+ 樹的所有數據都存儲在葉子節點
B+ 樹是在B樹的基礎上的一種優化,使其更加適合外存儲索引結構,InnoDB存儲引擎及時B+ 樹實現其索引結構
從B樹結構圖中可以看到每個節點中不僅包含數據的Key值,還有data值,而每一頁的存儲空間是有限的,如果data數據較大時會導致每一個節點(也就是每一頁)能存儲的key的數量很小,當存儲的數據量很大時同時會導致B樹的深度很深,高度很高,增大磁盤的IO次數,進而影響查詢效率,在B+樹中,所有數據節點都是按照鍵值大小順序存放在同一層的葉子節點上,而非葉子節點上只存儲Key值信息,這樣可以大大增加每個節點存儲的key值數量,降低B+樹的高度
以下是B樹的結構圖,所有的節點都有存儲信息,
以下是B+ 樹的結構示意圖,只有在葉子節點才會存儲數據信息,其他節點只存儲key 值和索引,
總結:
-
B+Tree 是B-樹的變種(PLUS版)多路絕對平衡查找樹,它擁有B-樹的優勢**
-
B+Tree 掃庫、表能力更強。
如果要從 B-Tree 中掃描表數據的話,基本要把整棵樹都要掃描一遍,因為每個節點都存在數據區。B+Tree 就不需要掃描整棵樹,只需要掃描葉子節點就可以了。
-
B+Tree** 的磁盤讀寫能力更強。
B+Tree 的節點上是不保存數據的,那么它保存的關鍵字就更多,這樣一次 IO 操作,加載的關鍵字就更多,所以它的磁盤讀寫能力更強。
-
B+Tree** 的排序能力更強。
B+Tree 的葉子節點天然就是順序存放的 。 B+樹葉子節點是順序排列的,並且相鄰節點具有順序引用的關系
-
B+Tree** 的查詢效率更加穩定。
比如我們從上圖的 B-Tree 中查詢一條 id 等於8的數據需要經過兩次 IO 操作,查詢一條 id 等於3的數據需要經過三次 IO 操作,而從上圖的 B+Tree 中只有葉子節點才保存數據,所以查詢任何數據都需要經過三次 IO 操作。 所以 B+Tree 的查詢效率更加穩定。
https://www.cnblogs.com/yinjw/p/11829284.html