一、idhtml
語句的執行順序標識,若是在語句中沒有子查詢或聯合,說明只有一個SELECT,因而這個列顯示爲1,不然內層的SELECT會順序編號.mysql
二、select_typesql
顯示了對應的查詢是簡單仍是複雜SELECT,主要有如下幾種查詢類型緩存
1)、simple 簡單類型服務器
語句中沒有子查詢或union優化
2)、primary spa
最外層的select ,不是主鍵htm
3)、union 排序
union是在select 語句中第二個select語句後面全部的select,第一個select 爲primary 索引
4)、dependent subquery
子查詢中內層中第一個select語句
5)、dependent union
子查詢中union且爲union中第二個select開始的後面全部select,依賴於外部的結果集。
6)、SUBQUERY
子查詢內層查詢的第一個SELECT,結果不依賴於外部查詢結果集。
7)、devived
派生表的查詢語句
8)、uncacheable subquery
結果集沒法緩存的子查詢
9)、union result
union中合併的結果
三、table
1)、顯示對應行正在訪問哪一個表
2)、當FROM子句中有子查詢或UNION時,table列是<derivedN>,其中N是id列對應的值
四、type
這列很重要,顯示了鏈接使用了哪一種類別,有無使用索引。主要包括如下幾種類型
1)、all
全表掃描,效果是最不理想的。
2)、const
const是在where條件以常量做爲查詢條件,最多隻會有一條記錄匹配,因爲是常量,實際上只需要讀一次。
3)、eq_ref
最多隻會有一條匹配結果,通常是經過主鍵或惟一鍵索引來訪問。通常會出如今鏈接查詢的語句中。
4)、fulltext
進行全文索引檢索。
5)、index
全索引掃描。MySQL在掃描表時按索引次序進行而不是行。
6)、index_merge
查詢中同時使用兩個(或更多)索引,而後對索引結果進行合併(merge),再讀取表數據。
7)、index_subquery
子查詢中的返回結果字段組合是一個索引(或索引組合),但不是一個主鍵或惟一索引。
8)、rang
索引範圍掃描。一個有限制的索引掃描,它開始於索引裏的某一點,返回匹配這個值域的行(顯而易見的範圍掃描.即帶有BETWEEN或在WHERE子句中帶有>的查詢,當MySQL使用索引去查找一系列值的時候,如IN()和OR列表,也爲顯示的範圍掃描)
9)、ref
也叫索引查找,他返回全部匹配某單個值的行,它可能會找到多個符合條件行。
10)、ref_or_null
與ref的惟一區別就是在使用索引引用的查詢以外再增長一個空值的查詢。
11)、system
系統表,表中只有一行數據;
12)、unique_subquery
子查詢中的返回結果字段組合是主鍵或惟一約束。
五、possible_keys
這一列顯示了查詢可使用哪些索引,是基於查詢訪問的列和使用的比較操做符來判斷的.若是沒有任何索引可使用,就會顯示成null
六、key
顯示了MySQL決定採用哪一個索引來優化對該表的訪問
七、key_len
1)、key_len列顯示mysql決定使用的鍵長度,若是鍵是null,則長度爲null。
2)、顯示MySQL在索引裏使用的字節數.舉個例子就是在查詢中使用到了主鍵,而主鍵的數據類型爲INT,則爲4,SMALLINT則爲2
3)、使用的索引長度,通常越短越好。
八、Ref
顯示了以前的表在key列記錄的索引中查詢值所用到的列或常量。
九、rows
顯示的是MySQL爲了找到所需的值而要讀取的行數.
十、extra
在此顯示的是在其餘列不適合顯示的額外信息,主要可能會是如下內容:
1)、Distinct
查找distinct 值,當mysql找到了第一條匹配的結果時,將中止該值的查詢,轉爲後面其餘值查詢。
2)、Full scan on NULL key
子查詢中的一種優化方式,主要在遇到沒法經過索引訪問null值的使用。
3)、Using index
MySQL將使用覆蓋索引,以免訪問表(就是僅僅使用了索引中信息而沒有讀取表中)
4)、Using where
意味着MySQL服務器將在存儲引擎檢索行後在進行過濾(將會經過WHERE條件來篩選存儲引擎返回的記錄)
5)、Using temporary
意味着MySQL在對查詢結果排序時會用到一個臨時表.
6)、Using filesort
看到這個的時候,查詢就須要優化了。意味着MySQL會對結果使用一個外部索引排序,而不是按索引次序從表裏讀出來.
參考資料:mysql explain 顯示的列的意義 http://www.studyofnet.com/news/1073.html