EXPLAIN
語句提供關於 MySQL 如何執行語句的資訊
當
EXPLAIN
與可解釋的語句一起使用時,MySQL 會顯示來自最佳化工具的關於語句執行計畫的資訊。也就是說,MySQL 會解釋它將如何處理該語句,包括關於資料表如何聯結以及以何種順序聯結的資訊。關於使用EXPLAIN
來取得執行計畫資訊的資訊,請參閱 第 10.8.2 節,「EXPLAIN 輸出格式」。當
EXPLAIN
與FOR CONNECTION
而不是可解釋的語句一起使用時,它會顯示在已命名連線中執行之語句的執行計畫。請參閱 第 10.8.4 節,「取得已命名連線的執行計畫資訊」。connection_id
對於
SELECT
語句,EXPLAIN
會產生可以使用SHOW WARNINGS
顯示的額外執行計畫資訊。請參閱 第 10.8.3 節,「擴充 EXPLAIN 輸出格式」。EXPLAIN
對於檢查涉及分割資料表的查詢很有用。請參閱 第 26.3.5 節,「取得關於分割的資訊」。可以使用
FORMAT
選項來選取輸出格式。TRADITIONAL
以表格格式呈現輸出。如果不存在FORMAT
選項,則此為預設值。JSON
格式以 JSON 格式顯示資訊。
在 EXPLAIN
的協助下,您可以看到應該在資料表中新增索引的位置,以便透過使用索引來尋找列,使語句執行更快。您也可以使用 EXPLAIN
來檢查最佳化工具是否以最佳順序聯結資料表。為了提示最佳化工具使用與 SELECT
語句中資料表名稱順序對應的聯結順序,請以 SELECT STRAIGHT_JOIN
而非單純的 SELECT
開始語句。(請參閱 第 15.2.13 節,「SELECT 語句」。)然而,STRAIGHT_JOIN
可能會阻止索引被使用,因為它會停用半聯結轉換。請參閱 使用半聯結轉換最佳化 IN 和 EXISTS 子查詢述詞。
最佳化器追蹤有時可能會提供與 EXPLAIN
互補的資訊。然而,最佳化器追蹤的格式和內容可能會在不同版本之間變更。詳情請參閱MySQL 內部:追蹤最佳化器。
如果您認為索引應該被使用,但實際卻沒有使用,請執行 ANALYZE TABLE
以更新表格統計資訊,例如索引鍵的基數,這可能會影響最佳化器的選擇。請參閱第 15.7.3.1 節,「ANALYZE TABLE Statement」。
EXPLAIN
也可用於取得表格中欄位的相關資訊。EXPLAIN
等同於 tbl_name
DESCRIBE
和 tbl_name
SHOW COLUMNS FROM
。如需更多資訊,請參閱第 15.8.1 節,「DESCRIBE Statement」和第 15.7.7.6 節,「SHOW COLUMNS Statement」。tbl_name