SQL 效能調校 - Explain

EXPLAIN 是 MySQL 中的一個關鍵字,用於分析查詢的執行計畫(execution plan)。通過執行 EXPLAIN 查詢,你可以獲得有關 MySQL 數據庫如何執行特定 SQL 查詢的詳細信息。這些信息包括查詢的執行順序、使用的索引、掃描的記錄數等。 EXPLAIN 用於優化 SQL 查詢,以確保它們以最有效的方式運行。

以下是使用 EXPLAIN 的基本方法以及你可以從結果中獲得的一些重要信息:

  1. 基本的 EXPLAIN 查詢:要使用 EXPLAIN,只需在你的 SQL 查詢之前加上 EXPLAIN 關鍵字,然後執行該查詢。例如:

    EXPLAIN SELECT * FROM your_table WHERE column_name = 'some_value';
  2. 查詢的 ID:在 EXPLAIN 結果中,你會看到查詢的 ID(id),這是查詢的唯一標識符,其數值越大優先值越高。

  3. 選擇類型select_type 表示查詢的類型,可以是 SIMPLE(簡單查詢)、PRIMARY(最外層查詢)、SUBQUERY(子查詢)等。不同的查詢類型可能會影響性能。

  4. 表格table 列顯示用於查詢的表格名稱。

  5. 類型type 表示用於查詢的連接類型,這可以告訴你是否在查詢中使用了索引。常見的類型包括 ALL(全表掃描)、index(使用索引掃描)、range(範圍查詢)等。性能從好到壞依次是:system > const > eq_ref > ref > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

  6. 可能的鍵possible_keys 顯示了可能用於查詢的索引列表。

  7. 使用的鍵key 顯示實際用於查詢的索引。這可以告訴你是否使用了索引以及使用了哪個索引。

  8. 鍵長度key_len 顯示了使用的索引的長度。

  9. 掃描的記錄數rows 顯示了查詢時掃描的記錄數。這可以幫助你評估查詢的效能。

  10. 額外信息Extra 列提供了關於查詢執行的其他信息,例如 Using where(表示使用了 WHERE 子句)或 Using temporary(表示使用了臨時表)。

通過分析 EXPLAIN 的結果,你可以了解 MySQL 是如何執行你的查詢的,並優化查詢以提高性能。你可以關注以下方面進行優化:

  • 確保查詢使用了適當的索引。

  • 減少掃描的記錄數,以降低查詢的複雜度。

  • 注意選擇類型,選擇最合適的查詢策略。

  • 識別並消除不必要的 Using temporaryUsing filesort

總之,EXPLAIN 是一個有用的工具,可以幫助你優化 SQL 查詢,以確保數據庫系統以最佳性能運行。

首先我們就先建立三張表,來進行測試

從我給的SELECT 範例,可以查看到各種狀況的EXPLAIN 結果,進而提升自我再編寫SQL 時,就能避免效能問題。

Last updated