B-Tree與B+Tree的區別

二叉樹:html

左右兩個子節點 能夠爲空數據庫

二叉查找樹:優化

左子樹小於根節點,又子樹大於根節點ui

平衡二叉樹:spa

任何節點的左右兩個子樹的高度相差最大爲1,(高度相差大於1會旋轉操做).net

B-Tree:(平衡多路查找樹)設計

B-Tree是爲磁盤等外存儲設備設計的一種平衡查找樹指針

系統從磁盤中讀取數據是以磁盤塊爲單位,一次會把統一磁盤的數據都讀出來htm

索引引入的目的是爲了快速查詢以及更新表中的數據,是有序表,能夠用二分查找提升效率blog

磁盤I/O操做是影響整個B-Tree查找效率的決定因素

若數據量很大則B-Tree的深度較大,增大查詢時的磁盤I/O次數,進而影響查詢效率(採用B+Tree的緣由)

B+Tree:

B+Tree是在B-Tree基礎上的一種優化,使其更適合實現外存儲索引結構

MySQL InnoDB引擎的索引底層實現採用的是B+tree

對於範圍查找來講,b+樹只需遍歷葉子節點鏈表便可,b樹卻須要重複地中序遍歷。

B+Tree相對於B-Tree有幾點不一樣:

  1. 非葉子節點是葉子節點的索引,。
  2. 要存儲的數據都存放在葉子節點中。
  3. 葉子節點之間都有一個鏈指針,不須要遍歷整棵樹就能夠獲得所存儲的所有數據。
爲何使用B+樹?言簡意賅,就是由於:
1.文件很大,不可能所有存儲在內存中,故要存儲到磁盤上
2.索引的結構組織要儘可能減小查找過程當中磁盤I/O的存取次數(爲何使用B-/+Tree,還跟磁盤存取原理有關。)
3.局部性原理與磁盤預讀,預讀的長度通常爲頁數的整數倍
4.數據庫利用磁盤預讀原理,講一個節點的大小設置爲一頁,這樣每個節點只須要一次I/O就能夠徹底載入
   而紅黑樹的結構,邏輯上很近的節點物理上可能很遠,沒法利用局部性
 
 
B+樹比B樹更合適做爲索引的緣由 (這裏面的兩個圖)
相關文章
相關標籤/搜索