十6、Mysql之Explain執行計劃

1、 如何查看mysql執行計劃?
  示例:explain SELECT * FROM tableName;
  執行結果以下: mysql


參數說明:
  一、id:SELECT的查詢序列號:
  二、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子句的子查詢)
  三、table:表名
  四、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;
  五、possible_keys:顯示可能應用在表中的索引,possible_keys的值一個或多個
  六、key:實際使用到的索引;
  七、key_len:索引中使用到的字節數,長度越短越好;
  八、ref:顯示索引的哪一列被使用了;九、rows:根據表統計信息及索引選用狀況,找到所須要讀取的行數;
  九、filtered:返回結果的行佔須要讀到的行(rows列的值)的百分比;
  十、Extra:包含不適合在其它列中顯示但十分重要的額外信息。

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

相關文章
相關標籤/搜索