首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL EXPLAIN 詳解:執行計劃欄位完整解讀與優化實戰

     編輯:MySQL 資料庫相關知識

EXPLAIN 是 SQL 優化的核心工具。本文系統整理 10 大輸出欄位含義、type 連接類型優劣排序、Extra 關鍵提示語義,並附實戰範例助您快速定位慢查詢根因。

語法

EXPLAIN SELECT * FROM t3 WHERE id = 3952602;

輸出欄位完整解讀

欄位含義關鍵判讀
idSELECT 識別符,執行順序由大到小子查詢 id 較大,先執行;衍生表顯示 <derivedN>
select_type查詢類型SIMPLE/PRIMARY/UNION/DEPENDENT UNION/SUBQUERY/DEPENDENT SUBQUERY/DERIVED/UNION RESULT
table存取的表(或衍生表 <derivedN>)非實體表名表示中間結果集
type**連接類型,效能核心指標**優→劣:system > const > eq_ref > ref > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
possible_keys理論可用索引為 NULL 表示無索引可用,需檢查 WHERE 條件列
key實際選用索引可用 FORCE/USE/IGNORE INDEX 強制指定
key_len索引鍵長度(位元組)越短越好(不損失精度),複合索引僅計算用到的前綴長度
ref與索引比較的列或常數const 表示常數比較;func 表示函數結果
rows預估掃描行數越小越好,配合 type 判斷效率
Extra額外資訊(優化關鍵)見下表詳細分類

type 類型詳細範例

system / const

EXPLAIN SELECT * FROM (SELECT * FROM t3 WHERE id=3952602) a;
-- id=1 type=system (衍生表僅 1 行)
-- id=2 type=const (主鍵等值查詢,僅 1 行)

eq_ref

CREATE UNIQUE INDEX idx_t3_id ON t3(id);
EXPLAIN SELECT * FROM t3, t4 WHERE t3.id = t4.accountid;
-- t3 type=eq_ref (唯一索引等值連接,最佳連接類型)

ref

DROP INDEX idx_t3_id ON t3;
CREATE INDEX idx_t3_id ON t3(id);  -- 非唯一索引
EXPLAIN SELECT * FROM t3, t4 WHERE t3.id = t4.accountid;
-- t3 type=ref (非唯一索引等值連接)

index_merge

EXPLAIN SELECT * FROM t4 WHERE id=3952602 OR accountid=31754306;
-- type=index_merge, key=idx_t4_id,idx_t4_accountid, Extra=Using union(...)

range

EXPLAIN SELECT * FROM t3 WHERE id=3952602 OR id=3952603;
-- type=range, key=idx_t3_id, rows=2

index / ALL

  • index:全索引掃描(僅讀索引樹,比 ALL 快)。
  • ALL:全表掃描,**需優化**(加索引、改寫 SQL)。

Extra 關鍵提示語義

提示含義是否需優化
Using index覆蓋索引,僅讀索引不回表否(優)
Using whereWHERE 過濾(Server 層過濾)視情況
Using index conditionICP (Index Condition Pushdown),存儲引擎層過濾否(優)
Using filesort**外部排序,無索引支援 ORDER BY**是
Using temporary**建立臨時表(通常 GROUP BY/DISTINCT/Order BY 不同)**是
Using join bufferJoin Buffer 機制(通常 type=ALL/index)視情況
Impossible WHEREWHERE 條件永假(如 id=1 AND id=2)檢查 SQL 邏輯
Select tables optimized away聚合查詢優化掃描(如 MIN/MAX 走索引)否(優)
Distinct / Not exists早期終止優化否(優)

實戰優化清單

  1. 目標:type 至少達 ref,最好 eq_ref/const;Extra 無 Using filesort/Using temporary。
  2. 索引設計:遵循「最左前綴」、覆蓋索引、避免冗餘索引。
  3. 避免索引失效:不在索引列上用函數/運算/隱式轉換、LIKE '%...' 導致全掃。
  4. 分頁優化:大偏移 LIMIT 100000, 10 改為「延遲關聯」或「游標分頁」。
  5. 定期維護:ANALYZE TABLE 更新統計資訊,OPTIMIZE TABLE 整理碎片。

進階:EXPLAIN FORMAT=JSON / ANALYZE

EXPLAIN FORMAT=JSON SELECT ...;  -- 結構化輸出,含成本估算
EXPLAIN ANALYZE SELECT ...;      -- 5.7+ / 8.0,實際執行並回報實際行數、耗時、迴圈次數

EXPLAIN ANALYZE 是**終極優化利器**,能揭露預估與實際的偏差,精準定位問題算子。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved