1. 程式人生 > 其它 >mysql explain 執行計劃

mysql explain 執行計劃

使用方法

explain select * from t

欄位解釋

id

select 查詢序列號,表示sql語句執行的順序

select_type

  • simple: 表示最簡單的select,沒有union和子查詢
  • primary: 最外面的查詢或者主查詢,在有子查詢的語句中,最外面的select查詢就是primary
  • subquery: 子查詢
  • union: union語句的第二個或者最後那一個select
  • union result: unino之後的結果
  • derived:衍生表

table

所查詢的表,簡稱,或者是中間表

type

  • const: 表中最多有一個匹配行,const用於比較primary key 或者unique索引快
  • eq_ref: 唯一性索引掃描,對於每個來自於前面的表的記錄,從該表中讀取唯一一行
  • ref: 非唯一性索引掃描,對於每個來自於前面的表的記錄,所有匹配的行從這張表取出
  • index_merge:查詢語句中用到了一張表的多個索引時,mysql會將多個索引合併到一起
  • range:按指定範圍(如 in,<,>,between,and等,但是前提是此欄位要建立索引)來檢索
  • index: 全索引掃描,通常比All快,因為索引檔案通常比資料檔案小
  • all :全表掃描,多數情況下需要優化

possible_keys

可能使用到的索引

key

實際使用的索引

key_len

索引欄位的長度

ref

列與索引的比較,表示上述表的連線匹配條件,即哪些列或常量被用於查詢索引列上的值

rows

掃描的行數

filtered

按表條件過濾的行百分比

extra

  • using index:使用了覆蓋索引(Covering Index),即通過索引就能返回結果,無需訪問表
  • using where:查詢使用了where 語句來處理結果
  • using join buffer:獲取連線條件時沒有使用索引,並且需要連線緩衝區來儲存中間結果
  • using filesort:這是 order by 語句的結果。這可能是一個CPU密集型的過程。using filesort表示出現了檔案內排 序,表示很不好的現象,必須要優化,特別是大表,可以通過選擇合適的索引來改進效能,用索引來為查詢結果排序
  • using temporary:mysql需要建立一張臨時表來儲存中間結果。 也就是說,需要先把資料放到臨時表中,然後從臨時 表中獲取需要的資料。出現這種臨時表,也是必須需要優化的地方,特別是資料量大的情況。兩個常見的原因是在來自 不同表的列上使用了distinct,或者使用了不同的 order by 和 group by 列