B樹及B+樹

B樹

特色:B樹中全部結點的孩子結點最大值稱爲B樹的階,一般用m表示。mysql

參看
B樹詳解 數據與結構
漫畫:什麼是B樹

1.根結點至少有兩個子女。
2.每一箇中間節點都包含k-1個元素和k個孩子,其中 m/2 <= k <= m
3.每個葉子節點都包含k-1個元素,其中 m/2 <= k <= m
4.全部的葉子結點都位於同一層。
5.每一個節點中的元素從小到大排列,節點當中k-1個元素正好是k個孩子包含的元素的值域分劃。sql

舉個例子:m=3
1.根結點至少有兩個子女。
2.每一箇中間節點都包含k-1個元素和k個孩子,其中 m/2 <= k <= m (2<=m<=3; ceil)
3.每個葉子節點都包含k-1個元素,其中 m/2 <= k <= m (2<=m<=3; )
4.全部的葉子結點都位於同一層。
5.每一個節點中的元素從小到大排列,節點當中k-1個元素正好是k個孩子包含的元素的值域分劃。(k=2 或者 k=3)數據庫

mysql的innodb引擎的索引原理B+樹

參考 https://www.jianshu.com/p/1f2...

特色:
1.有k個子樹的中間節點包含有k個元素(B樹中是k-1個元素),每一個元素不保存數據,只用來索引,全部數據都保存在葉子節點。
2.全部的葉子結點中包含了所有元素的信息,及指向含這些元素記錄的指針,且葉子結點自己依關鍵字的大小自小而大順序連接。
3.全部的中間節點元素都同時存在於子節點,在子節點元素中是最大(或最小)元素。性能

衛星數據:索引元素指向的數據記錄,如數據庫表的某一行。在B樹不管葉子節點和中間節點都帶衛星數據,而B+樹中只有葉子節點帶衛星數據,其他中間節點僅僅是索引,沒有任何的數據關聯。.net

在數據庫的彙集索引(Clustered Index)中,葉子節點直接包含衛星數據。在非彙集索引(NonClustered Index)中,葉子節點帶有指向衛星數據的指針。指針

B樹中由於葉子節點要存儲數據的值,使用中序遍歷,而B+樹中元素的值或者指針都存在葉子節點。因此數據範圍查詢的時候B樹使用中序遍歷,B+樹直接在葉子節點組成的單鏈表中遍歷便可。blog

B+樹中的中間節點的數據在子節點都能找到,可是子節點的數據不必定在中間節點可以找到。索引

B+樹相對於B樹的優點
1.單一節點存儲更多的元素,使得查詢的IO次數更少。
2.全部查詢都要查找到葉子節點,查詢性能穩定。
3.全部葉子節點造成有序鏈表,便於範圍查詢。get

相關文章
相關標籤/搜索