首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

詳解 MySQL EXPLAIN 命令:輸出欄位含義、Extra 關鍵值與優化實戰

     編輯:MySQL 綜合教學

EXPLAIN 輸出欄位完整解讀

欄位含義優化關注點
idSELECT 識別符越大越先執行;NULL=UNION 結果合併
select_type查詢類型SIMPLE, PRIMARY, UNION, DEPENDENT SUBQUERY(關聯子查詢, 慢), DERIVED(衍生表), SUBQUERY, UNION RESULT
table訪問表/衍生表<derivedN>, <unionM,N> 臨時表無索引
type**訪問類型 (核心)**system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
possible_keys候選索引為空=無索引可用
key實際使用索引NULL=未用索引;可 FORCE/IGNORE INDEX 干預
key_len索引長度(字節)推斷聯合索引用了幾列;越短越好
ref比較值來源const, 列名, func
rows預估掃描行數統計信息偏差大時誤導優化器;ANALYZE TABLE 更新
filtered過濾後剩餘百分比 (5.7+)rows * filtered% ≈ 實際參與 Join 行數
Extra**額外信息 (核心)**見下表

Extra 關鍵值含義與優化對策

值含義優化方向
Using index**覆蓋索引** (僅掃描索引樹)**極佳**,設計覆蓋索引達成
Using whereServer 層過濾嘗試 ICP 下推或建更好索引
Using index condition**索引條件下推 ICP (5.6+)**好現象,二級索引 LIKE/範圍下推減少回表
Using temporary創建內部臨時表優化 SQL 避免臨時表;增大 tmp_table_size 避免落盤
Using filesort額外排序建索引匹配 ORDER BY;或接受小結果集排序
Using join buffer (Block Nested Loop)Join 無索引用 Join Buffer給關聯列加索引;調大 join_buffer_size
Select tables optimized away聚合查詢優化掉表訪問好現象 (如 COUNT(*) 無 WHERE)
Impossible WHEREWHERE 條件恆假檢查 SQL 邏輯
No tables used無表查詢正常
Distinct優化 DISTINCT (找到第一匹配停止)好現象
Not existsLEFT JOIN 優化 (匹配到停止)好現象
Range checked for each record (index map: N)無理想索引,逐行檢查用哪個索引**極慢**,必須加索引

type 訪問類型性能梯隊詳解

  1. system/const:0-1 行,主鍵/唯一索引等值查找,**極快**。
  2. eq_ref:Join 時主鍵/唯一索引匹配,每行最多 1 匹配,**極快**。
  3. ref:非唯一索引/聯合索引前綴匹配,**良好**。
  4. range:索引範圍掃描 (>, >=, <, <=, BETWEEN, IN, LIKE 'prefix%'),**可接受**。
  5. index:全索引掃描 (覆蓋索引/ORDER BY 索引)、**次優**。
  6. ALL:全表掃描,**必須優化** (加索引/分區/縮小範圍)。

實戰優化口訣

  1. 看 type:≥ ref 才安心,ALL/index_merge 必改。
  2. 看 key:有無命中預期索引?key_len 幾列?
  3. 看 Extra:Using temporary/filesort → 首優;Using index → 滿意。
  4. 看 rows × filtered:驅動表是否過大?需否 STRAIGHT_JOIN/Hint。
  5. 看 select_type:DEPENDENT SUBQUERY → 改寫 JOIN/CTE。

進階:EXPLAIN ANALYZE / FORMAT=TREE (8.0.18+)

EXPLAIN ANALYZE SELECT ...;  -- 實際執行,顯示實際耗時、行數、循環、I/O、內存
EXPLAIN FORMAT=TREE SELECT ...;  -- 樹狀結構,直觀 Join 順序、並行、物化
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved