Select_type:所使用的查詢類型,主要有如下這幾種查詢類型。mysql
DEPENDENT SUBQUERY:子查詢內層的第一個SELECT,依賴於外部查詢的結果集。算法
DEPENDENT UNION:子查詢中的UNION,且爲UNION中從第二個SELECT開始的後面全部SELECT,一樣依賴於外部查詢的結果集。sql
PRIMARY:子查詢中的最外層查詢,注意並非主鍵查詢。數據庫
SIMPLE:除子查詢或UNION以外的其餘查詢。緩存
SUBQUERY:子查詢內層查詢的第一個SELECT,結果不依賴於外部查詢結果集。函數
UNCACHEABLE SUBQUERY:結果集沒法緩存的子查詢。優化
UNION:UNION語句中第二個SELECT開始後面的全部SELECT,第一個SELECT爲PRIMARY。排序
UNION RESULT:UNION 中的合併結果。索引
Table:顯示這一步所訪問的數據庫中的表的名稱。it
Type:告訴咱們對錶使用的訪問方式,主要包含以下集中類型。
all:全表掃描。
const:讀常量,最多隻會有一條記錄匹配,因爲是常量,實際上只需要讀一次。
eq_ref:最多隻會有一條匹配結果,通常是經過主鍵或惟一鍵索引來訪問。
fulltext:進行全文索引檢索。
index:全索引掃描。
index_merge:查詢中同時使用兩個(或更多)索引,而後對索引結果進行合併(merge),再讀取表數據。
index_subquery:子查詢中的返回結果字段組合是一個索引(或索引組合),但不是一個主鍵或惟一索引。
rang:索引範圍掃描。
ref:Join語句中被驅動表索引引用的查詢。
ref_or_null:與ref的惟一區別就是在使用索引引用的查詢以外再增長一個空值的查詢。
system:系統表,表中只有一行數據;
unique_subquery:子查詢中的返回結果字段組合是主鍵或惟一約束。
Possible_keys:該查詢能夠利用的索引。若是沒有任何索引可使用,就會顯示成null,這項內容對優化索引時的調整很是重要。
Key:MySQL Query Optimizer 從 possible_keys 中所選擇使用的索引。
Key_len:被選中使用索引的索引鍵長度。
Ref:列出是經過常量(const),仍是某個表的某個字段(若是是join)來過濾(經過key)的。
Rows:MySQL Query Optimizer 經過系統收集的統計信息估算出來的結果集記錄條數。
Extra:查詢中每一步實現的額外細節信息,主要會是如下內容。
Distinct:查找distinct 值,當mysql找到了第一條匹配的結果時,將中止該值的查詢,轉爲後面其餘值查詢。
Full scan on NULL key:子查詢中的一種優化方式,主要在遇到沒法經過索引訪問null值的使用。
Range checked for each record (index map: N):經過 MySQL 官方手冊的描述,當 MySQL Query Optimizer 沒有發現好的可使用的索引時,若是發現前面表的列值已知,部分索引可使用。對前面表的每一個行組合,MySQL檢查是否可使用range或 index_merge訪問方法來索取行。
SELECT tables optimized away:當咱們使用某些聚合函數來訪問存在索引的某個字段時,MySQL Query Optimizer 會經過索引直接一次定位到所需的數據行完成整個查詢。固然,前提是在 Query 中不能有 GROUP BY 操做。如使用MIN()或MAX()的時候。
Using filesort:當Query 中包含 ORDER BY 操做,並且沒法利用索引完成排序操做的時候,MySQL Query Optimizer 不得不選擇相應的排序算法來實現。
Using index:所需數據只需在 Index 便可所有得到,不需要再到表中取數據。
Using index for group-by:數據訪問和 Using index 同樣,所需數據只需要讀取索引,當Query 中使用GROUP BY或DISTINCT 子句時,若是分組字段也在索引中,Extra中的信息就會是 Using index for group-by。
Using temporary:當 MySQL 在某些操做中必須使用臨時表時,在 Extra 信息中就會出現Using temporary 。主要常見於 GROUP BY 和 ORDER BY 等操做中。
Using where:若是不讀取表的全部數據,或不是僅僅經過索引就能夠獲取全部須要的數據,則會出現 Using where 信息。
Using where with pushed condition:這是一個僅僅在 NDBCluster存儲引擎中才會出現的信息,並且還需要經過打開 Condition Pushdown 優化功能纔可能被使用。控制參數爲 engine_condition_pushdown 。
Impossible WHERE noticed after reading const tables:MySQL Query Optimizer 經過收集到的統計信息判斷出不可能存在結果。
No tables:Query 語句中使用 FROM DUAL或不包含任何 FROM子句。
Not exists:在某些左鏈接中,MySQL Query Optimizer經過改變原有 Query 的組成而使用的優化方法,能夠部分減小數據訪問次數。