MySQL EXPLAIN結(jié)果中哪些信息要引起關(guān)注

2018-07-31 19:01 更新

我們使用EXPLAIN解析SQL執(zhí)行計(jì)劃時(shí),如果有下面幾種情況,就需要特別關(guān)注下了:

首先看下 type 這列的結(jié)果,如果有類型是 ALL 時(shí),表示預(yù)計(jì)會進(jìn)行全表掃描(full table scan)。通常全表掃描的代價(jià)是比較大的,建議創(chuàng)建適當(dāng)?shù)乃饕?,通過索引檢索避免全表掃描。此外,全索引掃描(full index scan)的代價(jià)有時(shí)候是比全表掃描還要高的,除非是基于InnoDB表的主鍵索引掃描。

再來看下 Extra 列的結(jié)果,如果有出現(xiàn) Using temporary 或者 Using filesort 則要多加關(guān)注:

Using temporary,表示需要?jiǎng)?chuàng)建臨時(shí)表以滿足需求,通常是因?yàn)镚ROUP BY的列沒有索引,或者GROUP BY和ORDER BY的列不一樣,也需要?jiǎng)?chuàng)建臨時(shí)表,建議添加適當(dāng)?shù)乃饕?/p>

Using filesort,表示無法利用索引完成排序,也有可能是因?yàn)槎啾磉B接時(shí),排序字段不是驅(qū)動表中的字段,因此也沒辦法利用索引完成排序,建議添加適當(dāng)?shù)乃饕?/p>

Using where,通常是因?yàn)槿頀呙杌蛉饕龗呙钑r(shí)(type 列顯示為ALL 或 index),又加上了WHERE條件,建議添加適當(dāng)?shù)乃饕?/p>

暫時(shí)想到上面幾個(gè),如果有遺漏,以后再補(bǔ)充。

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

更多詳情請看官方文檔:8.8.2 EXPLAIN Output Format

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號