從數據結構分析mysql為何使用B+tree


理解mysql為何選擇升級版的二叉樹,就需要對各種常用的二叉樹進行對比。B+Tree是一種特殊的二叉樹,本質上也算二叉樹。自然會滿足二叉樹的一般特性。

比如,比節點數據大的在右邊,節點數據小的在左邊。

 

 

 

二叉樹(Binary Tree):每個結點最多有兩個子樹的樹結構。一棵深度為k,且有2^k-1個結點的二叉樹,稱為滿二叉樹。

 

 

 

 

AVL樹(平衡二叉樹):它是一種排序的二叉樹。主要特征:左右子樹的樹高差絕對值不能超過1.

 

 

 

R-B Tree(Red/Black Tree)紅黑樹,本質上也是一種二叉樹。  特性:

1)每個結點要么是紅的,要么是黑的。  
2)根結點是黑的。  
3)每個葉結點(葉結點即指樹尾端NIL指針或NULL結點)是黑的。  
4)如果一個結點是紅的,那么它的倆個兒子都是黑的。  
5)對於任一結點而言,其到葉結點樹尾端NIL指針的每一條路徑都包含相同數目的黑結點。

* 新添加節點,均為紅色。

 

 

 

 

 B-Tree(B樹):是一種自平衡的樹,能夠保持數據有序。與二叉樹的區別,可以有多個子節點,每個節點可以存儲多個值。

m 階(根結點中關鍵字的個數為1~m-1)的B樹具有特性:

1)每個節點最多有 m 個子節點

2)除根節點和葉子節點,其它每個節點至少有 [m/2] (向上取整的意思)個子節點

3)若根節點不是葉子節點,則其至少有2個子節點

4)所有NULL節點到根節點的高度都一樣

5)除根節點外,其它節點都包含 n 個key,其中 [m/2] -1 <= n <= m-1

比如每個節點最大深度=3。(3階B樹)

 

 

 B+Tree(B+樹):是B-Tree的一種變種樹。自然也會滿足B樹相關特性。主要區別:B+樹的葉子會包含所有的節點數據,並產生鏈表結構。

 

 mysql數據InnoDb,采用B+Tree作為索引結構。

B樹索引示例圖

 

 B+樹索引示例圖

 

 

B樹:

每個節點由三部分組成:key,指針,數據data;

key和指針互相間隔,節點兩端是指針。

每個葉子節點最少包含一個key和兩個指針,最多包含2d-1個key和2d個指針,葉節點的指針均為null(d 大於1的正整數,表示B樹的度)

B+樹:

每個非葉子節點由二部分組成:key,指針。

葉子節點沒有指針,只有key、數據data。

指針可能數量不一致,但是每個節點的域和上限是一致的

 

單索引key查詢,B樹比B+樹能更快查詢出來數據。 但是范圍查詢B+樹優勢更加明顯, 因為B+樹葉子已經鏈表排序存儲,非常好定位區間搜索。

 


免責聲明!

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



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