「MySQL FAQ」系列—EXPLAIN結果中哪些信息要引起關注

我們使用EXPLAIN解析SQL執行計劃時,如果有下面幾種情況,就需要特別關注下了:

首先看下 type 這列的結果,如果有類型是 ALL 時,表示預計會進行全表掃描(full table scan)。通常全表掃描的代價是比較大的,建議創建適當的索引,通過索引檢索避免全表掃描。此外,全索引掃描(full index scan)的代價有時候是比全表掃描還要高的,除非是基於InnoDB表的主鍵索引掃描。

再來看下 Extra 列的結果,如果有出現 Using temporary 或者 Using filesort 則要多加關注:

Using temporary,表示需要創建臨時表以滿足需求,通常是因為GROUP BY的列沒有索引,或者GROUP BY和ORDER BY的列不一樣,也需要創建臨時表,建議添加適當的索引。

Using filesort,表示無法利用索引完成排序,也有可能是因為多表連接時,排序字段不是驅動表中的字段,因此也沒辦法利用索引完成排序,建議添加適當的索引。

Using where,通常是因為全表掃描或全索引掃描時(

type 列顯示為 ALLindex),又加上了WHERE條件,建議添加適當的索引。

暫時想到上面幾個,如果有遺漏,以後再補充。

其他狀態例如:Using index、Using index condition、Using index for group-by 則都還好,不用緊張。


分享到:


相關文章: