一 簡介:今天咱們來聊聊explain中type的相關解讀
二 類型:
system
: 表中只有一條數據. 這個類型是特殊的 const
類型.
const
: 針對主鍵或唯一索引的等值查詢掃描, 最多只返回一行數據. const 查詢速度非常快, 因為它僅僅讀取一次即可
eq_ref
: 此類型通常出現在多表的 join 查詢, 表示對於前表的每一個結果, 都只能匹配到后表的一行結果. 並且查詢的比較操作通常是 =
, 查詢效率較高. 關鍵字:連接字段 主鍵或者唯一性索引
ref : 此類型通常出現在多表的 join 查詢, 針對於非唯一或非主鍵索引, 或者是使用了 最左前綴
規則索引的查詢. 關鍵字:非唯一性索引
ref_or_null:與ref方法類似,只是增加了null值的比較。
range
: 表示使用索引范圍查詢, 通過索引字段范圍獲取表中部分數據記錄. 這個類型通常出現在 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN() 操作中.
index
: 表示全索引掃描(full index scan), 關鍵字:查詢字段和條件都是索引本身
index_merge:表示查詢使用了兩個以上的索引,最后取交集或者並集,常見and ,or的條件使用了不同的索引.效率不是很高 關鍵字:索引合並
unique_subquery:用於where中的in形式子查詢,子查詢返回不重復值唯一值
index_subquery:用於in形式子查詢使用到了輔助索引或者in常數列表,子查詢可能返回重復值,可以使用索引將子查詢去重。
fulltext:全文索引檢索,要注意,全文索引的優先級很高,若全文索引和普通索引同時存在時,mysql不管代價,優先選擇使用全文索引
all:這個就是全表掃描數據文件,然后再在server層進行過濾返回符合要求的記錄。
三 效率總結
1 依次從好到差: 1 system,const,index , range,index_merge,ALL 單獨查詢
2 eq_ref,ref,ref_or_null all 多表join 查詢
3 index_subquery unique_subquery 子查詢
2 index_merge之外,其他的type只可以用到一個索引