標籤:io操作 詳細 doc 部分 result 排序 兩種 輸出 inf
id: 序號;實際表示優先順序,值越大越先被執行。
--------------------------------------------------------------
select_type
SELECT 語句的類型,可以有下面幾種。
SIMPLE:最簡單的SELECT語句,沒有使用UNION或子查詢。
PRIMARY:在巢狀查詢中是最外層的SELECT語句,在UNION查詢中是最前面的SELECT語句。
UNION:UNION中第二個以及後面的SELECT語句。
DERIVED:派生表,在FROM子句中的子查詢語句(subquery in FROM clause)。
UNION RESULT:一個UNION查詢的結果。
DEPENDENT UNION:顧名思義,首先需要滿足UNION的條件,及UNION中第二個以及後面的SELECT語句,同時該語句依賴外部的查詢。
部分type說明: 從好到壞
const: 最佳化成常量-主鍵在where條件列表
eq_ref: 唯一性索引掃描
ref: 非唯一性索引掃描
range: 掃描部分索引,索引範圍掃描
index: 掃描整顆索引樹
ALL: 掃描全表
-------------------------------------------------------------------------------------
Extra
Extra是EXPLAIN輸出中另外一個很重要的列,該列顯示MySQL在查詢過程中的一些詳細資料,包含的資訊很多,只選擇幾個重點的介紹下。
Using filesort:
MySQL有兩種方式可以產生有序的結果,通過使用索引或者排序操作,當Extra中出現了Using filesort 說明MySQL使用了後者,但注意雖然叫filesort但並不是說明就是用了檔案來進行排序,只要可能排序都是在記憶體裡完成的。大部分情況下利用索引排序更快,所以一般這時也要考慮最佳化查詢了。
Using temporary:
說明使用了暫存資料表,一般看到它說明查詢需要最佳化了,就算避免不了暫存資料表的使用也要盡量避免硬碟暫存資料表的使用。
Using index:
說明查詢是覆蓋了索引的,這是好事情。MySQL直接從索引中過濾不需要的記錄並返回命中的結果。這是MySQL服務層完成的,但無需再回表查詢記錄。
Using index condition
這是MySQL 5.6出來的新特性,叫做“索引條件推送”。簡單說一點就是MySQL原來在索引上是不能執行如like這樣的操作的,但是現在可以了,這樣減少了不必要的IO操作,但是只能用在二級索引上,詳情點這裡。
Using where:
使用了WHERE從句來限制哪些行將與下一張表匹配或者是返回給使用者。
mysql explain詳解