在mysql的各種引擎中,最常用到樹就是 B樹,B+樹,最早由平衡二叉樹演變而來
是以我們要了解B+樹,首先需要了解二叉樹,平衡二叉樹,平衡多路查找樹(B-樹)
1,二叉樹,左邊的樹的鍵值小于跟鍵值,右側子樹的鍵值大于跟鍵值
當深度為一的時候,查找次數為1,深度為二的時候,随着3号球的加入,查找次數變為兩次,7号球的加入,查找次數為兩次。
當深度為三的時候,3号球加入,查找次數為3,5号球,8号球同理,最終平均查找次數為(1+2+2+3+3+3)/6 為 2.3次
2,平衡二叉樹
平衡二叉樹,在符合二叉樹的條件下,還滿足兩個子樹的高度差,最大為1
當平衡樹中插入,或者删除節點導緻由平衡樹變為非平衡樹的時候,可以通過旋轉的方式,重新平衡
3,平衡多路查找樹:
B-樹是為磁盤等外部記憶體設計的平衡查找樹。
B-Tree 能讓系統搞笑的找到資料在的磁盤,然後進行資料讀取。
為了描述它,我們需要定一個二進制組[key,data] ,key記錄鍵值,data記錄除鍵值外的主資料
每個節點占用一個磁盤空間,一個節點上兩個升序關鍵字,三個隻想子節點的指針。以根節點為例
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
相比B-樹,缺少了data,就可以更多的存儲key,進而減小深度