B+樹和B樹的區別? 為什么MYSQL要用B+ 樹而不用B樹


B+樹和B樹的區別? 為什么MYSQL要用B+ 樹而不用B樹

首先B樹的所有節點都存儲數據信息,而B+ 樹的所有數據都存儲在葉子節點

B+ 樹是在B樹的基礎上的一種優化,使其更加適合外存儲索引結構,InnoDB存儲引擎及時B+ 樹實現其索引結構

從B樹結構圖中可以看到每個節點中不僅包含數據的Key值,還有data值,而每一頁的存儲空間是有限的,如果data數據較大時會導致每一個節點(也就是每一頁)能存儲的key的數量很小,當存儲的數據量很大時同時會導致B樹的深度很深,高度很高,增大磁盤的IO次數,進而影響查詢效率,在B+樹中,所有數據節點都是按照鍵值大小順序存放在同一層的葉子節點上,而非葉子節點上只存儲Key值信息,這樣可以大大增加每個節點存儲的key值數量,降低B+樹的高度

以下是B樹的結構圖,所有的節點都有存儲信息,

 

 

 

以下是B+ 樹的結構示意圖,只有在葉子節點才會存儲數據信息,其他節點只存儲key 值和索引,

 

 

 

總結:

  1. B+Tree 是B-樹的變種(PLUS版)多路絕對平衡查找樹,它擁有B-樹的優勢**

  1. B+Tree 掃庫、表能力更強。

如果要從 B-Tree 中掃描表數據的話,基本要把整棵樹都要掃描一遍,因為每個節點都存在數據區。B+Tree 就不需要掃描整棵樹,只需要掃描葉子節點就可以了。

  1. B+Tree** 的磁盤讀寫能力更強。

B+Tree 的節點上是不保存數據的,那么它保存的關鍵字就更多,這樣一次 IO 操作,加載的關鍵字就更多,所以它的磁盤讀寫能力更強。

  1. B+Tree** 的排序能力更強。

B+Tree 的葉子節點天然就是順序存放的 。 B+樹葉子節點是順序排列的,並且相鄰節點具有順序引用的關系

  1. B+Tree** 的查詢效率更加穩定。

比如我們從上圖的 B-Tree 中查詢一條 id 等於8的數據需要經過兩次 IO 操作,查詢一條 id 等於3的數據需要經過三次 IO 操作,而從上圖的 B+Tree 中只有葉子節點才保存數據,所以查詢任何數據都需要經過三次 IO 操作。 所以 B+Tree 的查詢效率更加穩定。

https://www.cnblogs.com/yinjw/p/11829284.html

 

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM