Mysql索引資料結構

2022-06-28 11:09:12 字數 1361 閱讀 2861

索引常見資料結構:

順序查詢: 最基本的查詢演算法-複雜度o(n),大資料量此演算法效率糟糕。

二叉樹查詢(binary tree search): o(log2n),資料本身的組織結構不可能完全滿足各種資料結構。

hash索引 無法滿足範圍查詢。雜湊索引基於雜湊表實現,只有精確匹配索引所有列的查詢才有效。

二叉樹、紅黑樹 [複雜度o(h)]導致樹高度非常高(平衡二叉樹乙個節點只能有左子樹和右子樹),邏輯上很近的節點(父子)物理上可能很遠,無法利用區域性性,io次數多查詢慢,效率低。todo 邏輯上相鄰節點沒法直接通過順序指標關聯,可能需要迭代回到上層節點重複向下遍歷找到對應節點,效率低

b-tree

b+tree: b-tree的變種

為什麼mysql選擇b+tree索引? b+tree索引有什麼好處? 

索引本身也很大,不可能全部儲存在記憶體中,因此索引往往以索引檔案的形式儲存的磁碟上。這樣的話,索引查詢過程中就要產生磁碟i/o消耗,相對於記憶體訪問,i/o訪問的消耗要高幾個數量級,所以索引的結構組織要儘量減少查詢過程中磁碟i/o的訪問次數,提公升索引效率。

區域性性原理與磁碟預讀:

由於儲存介質的特性,磁碟本身訪問就比主存慢很多,再加上機械運動耗費,磁碟的訪問速度往往是主存的幾百分分之一,因此為了提高效率,要儘量減少磁碟i/o。為了達到這個目的,磁碟往往不是嚴格按需讀取,而是每次都會預讀,即使只需要乙個位元組,磁碟也會從這個位置開始,順序向後讀取一定長度的資料放入記憶體。預讀可以提高i/o效率。預讀的長度一般為頁(page:計算機管理儲存器的邏輯塊-通常為4k)的整倍數. 主存和磁碟以頁為單位交換資料。當程式要讀取的資料不在主存中時,會觸發乙個缺頁異常,此時系統會向磁碟發出讀盤訊號,磁碟會找到資料的起始位置並向後連續讀取一頁或幾頁載入記憶體中。

b-/+tree索引的效能優勢:

一般使用磁碟i/o次數評價索引優劣。1.結合作業系統儲存結構優化處理: mysql巧妙運用作業系統儲存結構(乙個節點分配到乙個儲存頁中->儘量減少io次數) & 磁碟預讀(快取預讀->加速預讀馬上要用到的資料).2.b+tree 單個節點能放多個子節點,相同io次數,檢索出更多資訊。3.b+tree 只在葉子節點儲存資料 & 所有葉子結點包含乙個鏈指標 & 其他內層非葉子節點只儲存索引資料。只利用索引快速定位資料索引範圍,先定位索引再通過索引高效快速定位資料。

**b+樹的優勢:

因為b+樹沒有與內部節點相關聯的資料,所以在記憶體頁面上可以容納更多的鍵。因此,訪問葉子節點上的資料需要更少的快取丟失。

b+樹的葉節點是鏈結的,因此對樹中的所有物件進行全面掃瞄只需要乙個線性遍歷所有葉節點。另一方面,b樹需要遍歷樹中的每一層。這種全樹遍歷可能比b+葉子的線性遍歷涉及更多的快取丟失。

b樹的優勢:

因為b樹包含每個鍵的資料,所以經常訪問的節點可以更靠近根,因此可以更快地訪問。

mysql 資料結構 Mysql索引資料結構

mysql索引資料結構 當慢查詢時,看sql是否走索引。索引的本質 索引是幫助mysql高效獲取資料的排好序的資料結構。mysql若不建立索引,查詢某條資料時則會逐行掃瞄,每掃瞄一行資料就會做一次磁碟io。b tree 葉節點具有相同的深度,葉節點的指標為空。所有索引元素不重複。葉節點中的資料索引從...

mysql索引資料結構 mysql索引資料結構

什麼是索引?索引就是排好序的資料結構,可以幫助我們快速的查詢到資料 幾種資料結構 二叉樹 如果資料是單邊增長的情況 那麼出現的就是和鍊錶一樣的資料結構了,樹高度大 紅黑樹 在二叉樹的基礎上多了樹平衡,也叫二叉平衡樹,不像二叉樹那樣極端的情況會往乙個方向發展。同樣我們查詢6,在二叉樹中我們需要經過6個...

MySQL索引資料結構

mysql官方對索引的定義為 索引 index 是幫助mysql高效獲取資料的資料結構。句子主幹就是索引是資料結構。資料庫查詢是資料庫的主要功能,我們都希望查詢資料的速度盡可能快,因此資料庫系統設計會從查詢的優化的角度進行優化。最基本的查詢演算法就是順序查詢,但這種複雜度為o n 查詢在資料量大的時...