banner
Tenifs

Tenifs

雄关漫道真如铁,而今迈步从头越。
github
follow
zhihu
email

導致 MySQL 索引失效的常見場景

explain 可以用來分析 SQL 語句,具體用法如下:

image

只需在要執行的 SQL 語句前面添加 explain 即可。

各個字段的含義如下:

  • id :選擇標識符,id 越大優先級越高,越先被執行;
  • select_type : 表示查詢的類型;
  • table :輸出結果集的表;
  • partitions : 匹配的分區;
  • type :表示表的連接類型;
  • possible_keys : 表示查詢時,可能使用的索引;
  • key : 表示實際使用的索引;
  • key_len: 索引字段的長度;
  • ref:列與索引的比較;
  • rows : 大概估算的行數;
  • filtered :按表條件過濾的行百分比;
  • Extra :執行情況的描述和說明。

其中最重要的就是 type 字段,type 值類型如下:

  • all : 掃描全表數據;

  • index : 遍歷索引;

  • range: 索引範圍查找;

  • index_subquery : 在子查詢中使用 ref;

  • unique_subquery : 在子查詢中使用 eq_ref;

  • ref_or_null : 對 null 進行索引的優化的 ref;

  • fulltext :使用全文索引;

  • ref :使用非唯一索引查找數據;

  • eq_ref : 在 join 查詢中使用主鍵或唯一索引關聯;

  • const :將一個主鍵放置到 where 後面作為條件查詢, MySQL 優化器就能把這次查詢優化轉化為一個常量。

總結#

由於不同的 MySQL版本,索引失效策略也有所不同。

大多數索引失效情況都是明確的,有少部分索引失效會因MySQL的版本不同而有所不同。

因此,我們應該在實踐過程中進行研究,具體問題具體分析,如果沒有辦法準確的判斷,可以使用explain進行驗證。

參考資料#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。