十六、Mysql之Explain執行計劃

Hro發表於2018-12-14

一、 如何檢視mysql執行計劃?
  示例:explain SELECT * FROM tableName;
  執行結果如下:

十六、Mysql之Explain執行計劃

引數說明:
  1、id:SELECT的查詢序列號:
  2、select_type:select的型別,有以下幾種形式:
    SIMPLE:簡單SELECT(不使用UNION或子查詢等)
    PRIMARY:最外面的SELECT:
    UNION:UNION中的第二個或後面的SELECT語句
    DEPENDENT UNION:UNION中的第二個或後面的SELECT語句,取決於外面的查詢
    UNION RESULT:UNION的結果。
    SUBQUERY:子查詢中的第一個SELECT
    DEPENDENT SUBQUERY:子查詢中的第一個SELECT,取決於外面的查詢
    DERIVED:匯出表的SELECT(FROM子句的子查詢)
  3、table:表名
  4、type:連線使用了哪種類別,有無使用索引,type分類如下:
    system:表只有一行;
    const:表最多隻有一行匹配,通用用於主鍵或者唯一索引比較時;
    eq_ref:唯一性索引掃描,對於每個索引鍵,表中只有一條記錄與之匹配,常見於主鍵或唯一索引掃描
    ref:非唯一性索引掃描,返回匹配某個單獨值得所有行;
    fulltext:全文搜尋
    ref_or_null:與ref類似,但包括NULL;
    index_merge:索引合併優化,但不包括跨表和全文索引;
    unique_subquery:用於where中的in形式子查詢,子查詢返回不重複值唯一值;
    index_subquery:用於in形式子查詢使用到了輔助索引或者in常數列表,子查詢可能返回重複值;
    range:只檢索給定範圍的行;
    index:讀全表,index只遍歷索引樹;
    ALL:表示全表掃描。
    效能由好到壞排序:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL;
  5、possible_keys:顯示可能應用在表中的索引,possible_keys的值一個或多個
  6、key:實際使用到的索引;
  7、key_len:索引中使用到的位元組數,長度越短越好;
  8、ref:顯示索引的哪一列被使用了;9、rows:根據表統計資訊及索引選用情況,找到所需要讀取的行數;
  9、filtered:返回結果的行佔需要讀到的行(rows列的值)的百分比;
  10、Extra:包含不適合在其它列中顯示但十分重要的額外資訊。

二、執行計劃的限制
  1、無法展示儲存過程,觸發器,UDF對查詢的影響
  2、無法使用EXPLAIN對儲存過程進行分析

相關文章