MySQL索引:B+樹索引
B+樹索引是傳統意義上的索引,這是目前關系型資料庫系統中查找最為常用和最為有效的索引,B+樹索引的構造類似于二叉樹,根據鍵值快速找到資料
B樹
B+樹是由B樹演化而來的,在了解B+樹之前,我們需要對B樹有一點認知,
B樹全稱Balance-tree(平衡多路查找樹)定義如下:
- 樹中每個結點至多有m 棵子樹(注:m指的是樹的階);
- 若根結點不是葉子結點,則至少有兩棵子樹(注:根節點至少有兩個兒子);
- 除根結點之外的所有非葉子結點至少有p個子節點([m/2]≤p≤m,[m/2]為向上取整,);
- 所有的非葉子結點中包含以下資料:(n,A0,K1,A1,K2,…,Kn,An)
其中:
Ki(i=1,2,…,n)為關鍵碼,且Ki<Ki+1(注:ki是真實資料,存放在線性表當中,且從左至右升序排列)
Ai 為指向兒子的指標(i=0,1,…,n),且指標Ai-1 所指子樹中所有結點的關鍵碼均小于Ki (i=1,2,…,n),An 所指子樹中所有結點的 關鍵碼均大于Kn,(注:每個ki資料兩旁各安放了一個指標,即Ai-1和Ai,左邊的子樹資料統統小于ki,右邊子樹的資料統 統大于ki)(注:總體來看指標數量比資料數量多1)
n 為關鍵碼的個數([m/2]-1≤n≤m-1), - 所有的葉子結點都出現在同一層次上,即所有葉節點具有相同的深度,等于樹高度,并且不帶資訊(可以看作是外部結點或查找失敗的結點,實際上這些結點不存在,指向這些結點的指標為空),

B+樹
B+樹是為磁盤或者其他直接存取輔助設備設計的一種平衡查找樹,在B+樹中,所有記錄節點都是按鍵值的大小順序存放在同一層的葉子節點上,由各葉子節點指標進行連接,
B樹每個節點都存盤資料,所有節點組成這棵樹,B+樹只有葉子節點存盤資料(B+數中有兩個頭指標:一個指向根節點,另一個指向關鍵字最小的葉節點),葉子節點包含了這棵樹的所有資料,所有的葉子結點使用鏈表相連,便于區間查找和遍歷,所有非葉節點起到索引作用,
B樹中葉節點包含的關鍵字和其他節點包含的關鍵字是不重復的,B+樹的索引項只包含對應子樹的最大關鍵字和指向該子樹的指標,不含有該關鍵字對應記錄的存盤地址,
B樹中每個節點(非根節點)關鍵字個數的范圍為m/2(向上取整)-1,m-1,并且具有n個關鍵字的節點包含(n+1)棵子樹,B+樹中每個節點(非根節點)關鍵字個數的范圍為m/2(向上取整),m,具有n個關鍵字的節點包含(n)棵子樹,
B+樹中查找,無論查找是否成功,每次都是一條從根節點到葉節點的路徑,
一顆高度為2的B+樹

B+樹的插入

B+樹的洗掉

B+樹索引
聚集索引:
聚集索引是按照每張表的主鍵構造的一顆B+樹,同時葉子節點中存放的即為整張表的行為記錄資料,也將聚集縮影的葉子節點成為資料頁,
由于實際的資料頁只能按照一顆B+數進行排序,因此每張表只能擁有一個聚集索引,此外,由于定義了資料的邏輯順序,聚集索引能特別快的訪問針對范圍值的查詢,
輔助索引
在輔助索引中,葉子節點不包含行記錄的全部資料,葉子節點除了包含鍵值以外,每個葉子節點中的索引行中還包含了一個書簽(bookMark),概述前用來告訴InnoDB存盤引擎哪里可以找到與索引相對應的行資料
輔助索引的存在并不影響資料在聚集索引中的組織,因此每張表尚客優有多個輔助索引
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/374453.html
標籤:其他
