8.8.1 通過 EXPLAIN 來優化查詢

8.8.1 通過 EXPLAIN 來優化查詢

EXPLAIN 語句會提供 MySQL 如何執行查詢的信息:

  • EXPLAIN 可以對 SELECT,DELETE,INSERT,和 UPDATE 語句進行分析。

  • 當對一個可分析的語句進行 EXPLAIN 操作時,MySQL 會顯示優化器的查詢執行計劃,也就是 MySQL 會分析出如何處理這條語句,包括不同表之間時如何聯合的。關於如何使用 EXPLAIN 來獲取查詢執行計劃信息可以查閱 8.2 EXPLAIN 輸出格式

  • 當 EXPLAIN 對 FOR CONNECTION connection_id 執行而不是對可分析語句執行的話,它會顯示當前命名連接正在執行語句的執行計劃,詳情可查閱 8.8.4 獲取命名連接的執行計劃信息

  • 對於 SELECT 語句來說,EXPLAIN 會產生額外的查詢執行計劃信息,可以通過 SHOW WARNINGS 語句來獲取這些額外信息。詳情可查閱 8.8.3 擴展 EXPLAIN 輸出格式

  • EXPLAIN 對於考察分區數據表的查詢非常有用。詳情可查閱 23.3.5 Obtaining Information About Partitions

  • 可以使用 FORMAT 選項來控制輸出格式。TRADITIONAL 是默認的輸出格式代表以表格的形式輸出,JSON 會以 JSON 的格式輸出數據。

通過 EXPLAIN ,可以知道在哪裏添加索引來加速查找行,從而加速語句的執行。也可以通過 EXPLAIN 語句來檢查優化器是否以最優的方式來聯合表。使用 SELECT STRAIGHT_JOIN 語句代替 SELECT 語句,來讓優化器按照指定的順序來聯合表,詳情可查閱 13.2.10, “SELECT Statement”。使用 STRAIGHT_JOIN 的時候會禁用半聯合轉換,從而不能有效的使用索引。詳情可查閱 [8.2.2.1 使用半聯合轉換優化 IN 和 EXIST 子查詢]。

優化器追蹤提供的信息有時可以和 EXPLAIN 互補。但是優化器追蹤的輸出格式會隨着版本的變化而變化。關於優化器追蹤的詳細信息可查閱 MySQL Internals: Tracing the Optimizer.

有時候在你明確已經使用了索引的時候,但執行計劃中沒有使用索引,你可以執行 ANALYZE TABLE 來更新表的統計信息(如鍵的基數等)從而改變優化器的選擇。詳細信息可查閱 13.7.3.1 ANALYZE TABLE Statement

Note
EXPLAIN 也可以用於獲取表的列信息。 EXPLAIN tbl_nameDESCRIBE tbl_nameSHOW COLUMNS FROM tbl_name 的功能是一樣的。詳細信息可查閱 13.8.1 DESCRIBE Statement13.7.7.5 SHOW COLUMNS Statement

發佈了26 篇原創文章 · 獲贊 20 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章