InnoDB中的索引(二)—聯合索引與覆蓋索引
theme: channing-cyan
一起養成寫作習慣!這是我參與「掘金日新計劃 · 4 月更文挑戰」的第12天,點選檢視活動詳情。
上篇文章講到了InnoDB中主要有B+樹索引,雜湊索引和全文索引,這篇文章主要介紹B+樹索引中的聯合索引和覆蓋索引
B+樹的索引
聯合索引
聯合索引是對錶中的多個列進行索引,如圖
這裡涉及到一個最左字首匹配的問題,mysql會一直向右匹配直到遇到範圍查詢(>、<、between、like)就停止匹配。對於a=x and b = y and c = z這種等於號的查詢則可以任意順序(因為會優化)
由於聯合索引對第二個或第n個鍵值也是進行了排序的,因此有時使用聯合索引會省一次排序。
覆蓋索引
從輔助索引中就可以查詢到的記錄,不需要查詢聚簇索引中的記錄。比如說count(1).
這樣的好處是由於輔助索引的葉子節點所包含的資訊,遠小於聚簇索引,因此可以減少IO操作。
那麼什麼時候不選擇索引呢
其實優化器判斷是否需要索引,無非是基於一個成本,比如說 select * from table where key > 1000 這裡key是一個輔助索引,
那雖然我們可以通過輔助索引找到對應的書籤,但是實際上讀取的時候並不是順序讀取,而是離散讀取,這樣成本就變得不可控了,因此當訪問資料佔整體比重較大時(超過20%),就會使用聚簇索引作為key
當然可能會存在離散讀取和順序讀取差距並不是特別大的情況,比如使用了固態硬碟,這時我們可以使用關鍵字FORCE INDEX來強制使用某個索引。
「其他文章」
- 寫在效能優化之前——瞭解些耗時概念
- 93. 復原 IP 地址
- 151. 顛倒字串中的單詞
- 22. 括號生成
- 82. 刪除排序連結串列中的重複元素 II
- 56. 合併區間
- InnoDB中的索引(二)—聯合索引與覆蓋索引
- InnoDB中的索引
- 41. 缺失的第一個正數
- InnoDB中的鎖(一)
- 用快速冪計算爬樓梯
- 124. 二叉樹中的最大路徑和
- 42. 接雨水
- 計算機組成原理——匯流排操作和定時
- 計算機組成原理——微指令和微地址
- 計算機組成原理——控制器
- 計算機組成原理——指令執行過程
- 計算機組成原理——匯流排操作和定時
- 計算機組成原理——匯流排仲裁
- go併發之路(六)——例項:比較二叉查詢樹是否等價