天天看點

mysql中用到的一些樹

在mysql的各種引擎中,最常用到樹就是 B樹,B+樹,最早由平衡二叉樹演變而來

是以我們要了解B+樹,首先需要了解二叉樹,平衡二叉樹,平衡多路查找樹(B-樹)

1,二叉樹,左邊的樹的鍵值小于跟鍵值,右側子樹的鍵值大于跟鍵值

mysql中用到的一些樹

當深度為一的時候,查找次數為1,深度為二的時候,随着3号球的加入,查找次數變為兩次,7号球的加入,查找次數為兩次。

當深度為三的時候,3号球加入,查找次數為3,5号球,8号球同理,最終平均查找次數為(1+2+2+3+3+3)/6 為 2.3次

2,平衡二叉樹

平衡二叉樹,在符合二叉樹的條件下,還滿足兩個子樹的高度差,最大為1

mysql中用到的一些樹

當平衡樹中插入,或者删除節點導緻由平衡樹變為非平衡樹的時候,可以通過旋轉的方式,重新平衡

3,平衡多路查找樹:

B-樹是為磁盤等外部記憶體設計的平衡查找樹。

B-Tree 能讓系統搞笑的找到資料在的磁盤,然後進行資料讀取。

為了描述它,我們需要定一個二進制組[key,data] ,key記錄鍵值,data記錄除鍵值外的主資料

mysql中用到的一些樹

每個節點占用一個磁盤空間,一個節點上兩個升序關鍵字,三個隻想子節點的指針。以根節點為例

p1 指向 大于17的磁盤空間,p2指向 17到35,p3指向 大于35的位置

例如我們查找36

根節點找到磁盤塊1,讀入記憶體【磁盤I/O第一次操作】

比較36,大于35,找到指針p3

根據p3找打磁盤塊3,讀入記憶體【磁盤I/O第二次操作】

比價36,小于65,找到指針p1

根據p1找到磁盤塊9,讀入記憶體【磁盤I/O第三次操作】

在磁盤中找到 36

可見B-Tree 減少了i/o操作,可以提高查詢效率

4,B+Tree

mysql中用到的一些樹

相比B-樹,缺少了data,就可以更多的存儲key,進而減小深度