首先看下 type 這列的結(jié)果,如果有類型是 ALL 時(shí),表示預(yù)計(jì)會(huì)進(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)表中的字段,因此也沒辦法利用索引完成排序,建議添加適當(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 則都還好,不用緊張。
更多建議: