數據結構-B+樹(簡介)

B+ 樹簡介

B+ 樹是基於 B-樹的變體,比 B-樹查詢性能更強

什麼是衛星數據

衛星數據就是索引元素指向的數據記錄,就是索引指向的是數據庫表中哪一行,對於 B-樹來說每個結點都有衛星數據,對於 B+ 樹來說只有葉子結點有衛星數據

聚集索引和非聚集索引

數據庫錶行中是物理順序和鍵值的邏輯順序相同,非聚集索引反之。對於聚集索引,B+ 樹的葉子結點直接包含了衛星數據,對於非聚集索引,B+ 樹的葉子結點帶有指向衛星數據的指針

爲什麼 B+ 樹比 B 樹更優秀?

  • 更少的 IO 次數

    B+ 樹的非葉子結點沒有衛星數據,所以各個磁盤頁理論上能存放更多的索引,換句話說就是下面規則中的 k 的值會比 B 樹更大,k 本來是 B+ 樹的階數,k 是依據磁盤頁的大小來定的,現在磁盤頁給 B+ 樹使用時可以存更多索引,那麼 B+ 樹相對於 B 樹來講,相同磁盤頁,這個 k 的值可以取更大。在樹的圖形中可以表現爲,B+ 樹比 B 樹更加矮胖

  • 性能更穩定

    B+ 樹每次查找都會找到葉子結點(因爲只有葉子結點包含衛星數據的相關信息),而 B 樹就不是,B 有時候會找到葉子結點,有時候只找到中間結點就不找了,B+ 樹查找性能上比 B 樹要穩定

  • 範圍查詢更簡單

    在範圍查詢時候,若查詢 a-b 索引的數據,B 樹需要做中序遍歷,B+ 樹只需要在結點鏈表上做遍歷就行了

B+ 樹規則

img

  • 1.有k個子樹的中間節點包含有k個元素(B樹中是k-1個元素),每個元素不保存數據,只用來索引,所有數據都保存在葉子節點
  • 2.所有的葉子結點中包含了全部元素的信息,及指向含這些元素記錄的指針,且葉子結點本身依關鍵字的大小自小而大順序鏈接
  • 3.每一個父節點中的元素會出現在所有子結點中,且是子結點的最大(最小值)

B+ 樹應用

mysql 使用 B+ 樹作索引

好文推薦

https://www.jianshu.com/p/1f2560f0e87f/

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