天天看點

mysql-執行計劃explain了解執行計劃explain

執行計劃explain

設計到的最重要字段

id,
select_type,
key,
rows,
Extra
           

id

select查詢的序列号,包含一組數字,表示查詢中執行select子句或操作表的順序,

id的序号會遞增,id值越大優先級越高,越先被執行

select_type

查詢的類型,主要是用于區分普通查詢、聯合查詢、子查詢等複雜的查詢

SIMPLE 簡單的select查詢,查詢中不包含子查詢或者union
PRIMARY
SUBQUERY
DERIVED
UNION
UNION RESULT

type

通路類型,sql查詢優化中一個很重要的名額,結果值從好到壞依次是:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

一般來說,好的sql查詢至少達到range級别,最好能達到ref
           

possible_keys

查詢涉及到的字段上存在索引,則該索引将被列出,但不一定被查詢實際使用

key

實際使用的索引,如果為NULL,則沒有使用索引。

查詢中如果使用了覆寫索引,則該索引僅出現在key清單中

key_len

表示索引中使用的位元組數,查詢中使用的索引的長度(最大可能長度),并非實際使用長度,理論上長度越短越好。key_len是根據表定義計算而得的,不是通過表内檢索出的

ref

顯示索引的那一列被使用了,如果可能,是一個常量const。

rows

根據表統計資訊及索引選用情況,大緻估算出找到所需的記錄所需要讀取的行數

Extra

不适合在其他字段中顯示,但是十分重要的額外資訊

Using filesort
Using temporary 使用臨時表儲存中間結果,也就是說mysql在對查詢結果排序時使用了臨時表,常見于order by 和 group by
Using index
Using where 使用了where過濾
Using join buffer 使用了連結緩存
Impossible WHERE
select tables optimized away 在沒有group by子句的情況下,基于索引優化MIN/MAX操作或者對于MyISAM存儲引擎優化COUNT(*)操作,不必等到執行階段在進行計算,查詢執行計劃生成的階段即可完成優化
distinct 優化distinct操作,在找到第一個比對的元祖後即停止找同樣值得動作
覆寫索引(Covering Index):也叫索引覆寫。就是select清單中的字段,隻用從索引中就能擷取,不必根據索引再次讀取資料檔案,換句話說查詢列要被所建的索引覆寫。 
注意: 
a、如需使用覆寫索引,select清單中的字段隻取出需要的列,不要使用select * 
b、如果将所有字段都建索引會導緻索引檔案過大,反而降低crud性能
           

著作權聲明:本文首次釋出于 劉自超,轉載請保留以上連結

繼續閱讀