索引分類
聚集索引
- 是按照主鍵構建的B+樹,葉子節點存放整張表的行記錄,稱爲數據頁。
- 每張表只能有一個。
- 聚集索引邏輯上連續,物理上不一定連續:
- 數據頁通過雙向鏈表鏈接,按照主鍵排序。
- 數據頁中的記錄通過雙向鏈表維護,物理上不一定按照主鍵的順序。
輔助索引
- 可以有多個。
- 葉子節點包含索引鍵值和指向行數據的書籤。
適用條件
- 高選擇性(字段取值範圍很廣,幾乎不重複)字段適合建立B+樹索引。
- Show Index 結果中的 Cardinality表示表中不重複的列的預估值,和總行數的比值接近於1,即爲高選擇性。
索引特徵
聯合索引
- 對錶上多個列進行索引,鍵值數量>=2(普通索引爲1),是B+樹。
- 葉子節點上的鍵值對是邏輯有序的。
- 對於聯合索引(a,b,c),應按照abc的順序使用,如a,ab,abc。
覆蓋索引
- 從輔助索引的鍵值中能查到需要的記錄,無需再回表查聚集索引。
- 參考。
不使用索引
- 需要訪問的數據佔比較大(20%左右),優化器會走聚集索引。如果走輔助索引,回表查詢的時候是隨機讀,遠慢於順序讀。
ICP優化
- Index Condition Pushdown, 取出索引的同時考慮進行where過濾。
- 過濾放在存儲引擎層,減少sql層拉取的數據