1. 程式人生 > >Mysql與索引有關的樹的概念

Mysql與索引有關的樹的概念

數據結構 二叉平衡樹 查找樹 最小 左右 因子 排序 子節點 指針

1.簡單地認識下與索引有關的數據結構: 
樹的簡單概念:由n個節點組成具有層次關系的集合,根朝上葉朝下 
樹的特點:每個節點有0或多個子節點,無父節點稱為根節點,每個非根節點有且只有一個父節點,每個節點可分為多個不相交的子樹(父節點除外) 

技術分享圖片

二叉樹的簡單概念:每個節點最多有2個子樹的樹結構,有左右子樹之分 

技術分享圖片

二叉查找樹的簡單概念:二叉樹的前提下,左子樹上所有節點的值均小於/等於其父節點的值,右子樹上所有幾點的值均大於/等於其父節點的值,左右子樹也分別為二叉查找樹 
二叉查找樹的查找步驟:小於往左,大於往右,相等則查找成功,子樹為空不成功 

技術分享圖片

但是,二叉查找樹遇到以下的情況效率會很低 

技術分享圖片

存在某一節點高度過高

就有了平衡二叉樹的存在
二叉平衡樹的簡單概念:在二叉查找樹的前提下,任何節點的兩棵子樹的高度最大差為1(|BF|<=1) 
平衡因子(BF):BF=左子樹深度—右子樹深度 
要維持二叉平衡樹的平衡,最為重要的是找到其最小不平衡樹,最小不平衡樹可以這樣來找:找距離插入節點最近且平衡因子的絕對值大於1的結點為根的子樹,找到最小不平衡樹之後呢,需要將其變為平衡,主要是依靠旋轉來實現的 
如何維持平衡(3種最小不平衡樹,3種旋轉方式): 
a.左旋:BF< -1時,父節點變為該節點的左節點 
b.右旋:BF> 1時,父節點變為該節點的右節點 
c.左旋+右旋 or 右旋+左旋:插入節點後,最小不平衡樹的BF與它的子樹的BF符號相反時,依具體情況先旋轉一次使符號相同後,再反向旋轉一次 

技術分享圖片

但是,二叉樹每一個節點最多也就對應2個子節點,節點一多的話樹的高度就會很大,查找起來要遍歷的層數會很多,效率還是個問題,於是,B+樹便應運而生了 。

B+樹的簡單概念:一種特殊的平衡查找樹,所有記錄節點都是按鍵值大小順序存放於同一層的葉子節點,各葉子節點以指針進行銜接,鍵值小在左,鍵值大在右 。

技術分享圖片

葉子節點從左到右順序遍歷便可得到所有鍵值的順序排序,這也是為什麽聯合索引需滿足“最左前綴匹配”的原因。

Mysql與索引有關的樹的概念