語法:explain select ....
變體:
1. explainextended select ....
將執行計劃「反編譯」成select語句;
運行showwarnings 能夠獲得被mysql優化器優化後的語句
2. explainpartitions select ...
用於分區表的explain
運行結果含義:
type: all ,index,range,ref,eq_ref,const,system null 從左到右,最差到最好;
all: full table scan ;mysql將遍歷全表以找到匹配的行;
index : index scan; index 和 all的區別在於index類型只遍歷索引;
range:索引範圍掃描,對索引的掃描開始於某一點,返回匹配值的行,常見與between ,< ,>等查詢;
ref:非惟一性索引掃描,返回匹配某個單獨值的全部行,常見於使用非惟一索引即惟一索引的非惟一前綴進行查找;
eq_ref:惟一性索引掃描,對於每一個索引鍵,表中只有一條記錄與之匹配,經常使用於主鍵或者惟一索引掃描;
const,system:當mysql對某查詢某部分進行優化,並轉爲一個常量時,使用這些訪問類型。若是將主鍵置於where列表中,mysql就能將該查詢轉化爲一個常量。
possible keys:
指出mysql能使用哪一個索引在表中找到行,查詢涉及到的字段若存在索引,則該索引被列出,可是不必定被查詢使用。
key:顯示mysql在查詢中實際使用的索引,若沒有使用索引,則顯示爲null。
key_len:表示索引中使用的字節數,能夠經過該列計算查詢中使用的索引的長度。key_len顯示的值爲索引字段的最大長度,並不是實際使用長度。即key_len是根據表定義計算而得,不是經過表內檢索出的。
ref:表示上述表的鏈接匹配條件,即哪些列或者常量被用於查找索引上的值;
rows:表示mysql根據表統計信息以及索引選用狀況,估算的找到所需記錄所須要的行數;
extra:包含不適合在其餘列中顯示可是十分重要的額外信息
a:using index:該值表示相迎的select操做中使用了覆蓋索引(cover index)
b:using where:表示mysql服務器再存儲引擎受到記錄後進行「後過濾」;
c:using temporary :表示mysql須要使用臨時表來存儲結果集,常見於排序和分組查詢;
d:using filesort:mysql中沒法利用索引完成排序,稱爲「文件排序」;
explain不足以下:
1 explain不會告訴你關於觸發器,存儲過程的信息或者用戶自定義的函數對查詢的影響狀況。
2 explain不會考慮緩存cache。