7.2.1 EXPLAIN 語法(得到SELECT 的相關信息)
EXPLAIN tbl_name
或者:
EXPLAIN SELECT select_options
EXPLAIN 語句可以被當作 DESCRIBE 的同義詞來用,也可以用來獲取一個MySQL要執行的 SELECT 語句的相關信息。
EXPLAIN tbl_name 語法和 DESCRIBE tbl_name 或 SHOW COLUMNS FROM tbl_name 一樣。
當在一個 SELECT 語句前使用關鍵字 EXPLAIN 時,MYSQL會解釋了即將如何運行該 SELECT 語句,它顯示了表如何連接、連接的順序等信息。
本章節主要講述了第二種 EXPLAIN 用法。
在 EXPLAIN 的幫助下,您就知道什麼時候該給表添加索引,以使用索引來查找記錄從而讓 SELECT 運行更快。
如果由於不恰當使用索引而引起一些問題的話,可以運行 ANALYZE TABLE 來更新該表的統計信息,例如鍵的基數,它能幫您在優化方面做出更好的選擇。詳情請看"14.5.2.1 ANALYZE TABLE Syntax"。
您還可以查看優化程序是否以最佳的順序來連接數據表。為了讓優化程序按照 SELECT 語句中的表名的順序做連接,可以在查詢的開始使用 SELECT STRAIGHT_JOIN 而不只是 SELECT。
EXPLAIN 返回了一行記錄,它包括了 SELECT 語句中用到的各個表的信息。這些表在結果中按照MySQL即將執行的查詢中讀取的順序列出來。MySQL用一次掃描多次連接(single-sweep, multi-join) 的方法來解決連接。這意味著MySQL從第一個表中讀取一條記錄,然後在第二個表中查找到對應的記錄,然後在第三個表中查找,依次類推。當所有的表都掃描完了,它輸出選擇的字段並且回溯所有的表,直到找不到為止,因為有的表中可能有多條匹配的記錄下一條記錄將從該表讀取,再從下一個表開始繼續處理。