BTree索引和B+Tree索引

BTree索引
       BTree是平衡搜索多叉樹,設樹的度爲d(d>1),高度爲h,那麼BTree要滿足以一下條件:

  • 每個葉子結點的高度一樣,等於h;
  • 每個非葉子結點由n-1個key和n個指針point組成,其中d<=n<=2d,key和point相互間隔,結點兩端一定是key;
  • 葉子結點指針都爲null;
  • 非葉子結點的key都是[key,data]二元組,其中key表示作爲索引的鍵,data爲鍵值所在行的數據;

BTree的結構如下:

       在BTree的機構下,就可以使用二分查找的查找方式,查找複雜度爲h*log(n),一般來說樹的高度是很小的,一般爲3左右,因此BTree是一個非常高效的查找結構。

B+Tree索引
B+Tree是BTree的一個變種,設d爲樹的度數,h爲樹的高度,B+Tree和BTree的不同主要在於:

  • B+Tree中的非葉子結點不存儲數據,只存儲鍵值;
  • B+Tree的葉子結點沒有指針,所有鍵值都會出現在葉子結點上,且key存儲的鍵值對應的數據的物理地址;

B+Tree的結構如下:

       一般來說B+Tree比BTree更適合實現外存的索引結構,因爲存儲引擎的設計專家巧妙的利用了外存(磁盤)的存儲結構,即磁盤的一個扇區是整數倍的page(頁),頁是存儲中的一個單位,通常默認爲4K,因此索引結構的節點被設計爲一個頁的大小,然後利用外存的“預讀取”原則,每次讀取的時候,把整個節點的數據讀取到內存中,然後在內存中查找,已知內存的讀取速度是外存讀取I/O速度的幾百倍,那麼提升查找速度的關鍵就在於儘可能少的磁盤I/O,那麼可以知道,每個節點中的key個數越多,那麼樹的高度越小,需要I/O的次數越少,因此一般來說B+Tree比BTree更快,因爲B+Tree的非葉節點中不存儲data,就可以存儲更多的key。

帶順序索引的B+TREE
        很多存儲引擎在B+Tree的基礎上進行了優化,添加了指向相鄰葉節點的指針,形成了帶有順序訪問指針的B+Tree,這樣做是爲了提高區間查找的效率,只要找到第一個值那麼就可以順序的查找後面的值。

B+Tree的結構如下:

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