explain
可以用來分析 SQL 語句,具體用法如下:
只需在要執行的 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
進行驗證。