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