萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

精通 MySQL EXPLAIN:執行計劃逐欄深度解讀與優化實戰

EXPLAIN 輸出欄位完整解讀

欄位含義關鍵判讀
idSELECT 識別符數字越大優先執行;相同則按順序;NULL 為衍生表/UNION 結果
select_type查詢類型SIMPLE、PRIMARY、SUBQUERY、DERIVED、UNION、UNION RESULT
table訪問的表實表、衍生表 、子查詢
partitions匹配的分區分區表才顯示
type**訪問類型(核心)**system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
possible_keys可能用到的索引為 NULL 表示無索引可用,需檢查 WHERE/ON 條件列
key實際使用的索引為 NULL 表示全表掃描;可用 USE INDEX/IGNORE INDEX 強制/忽略
key_len索引長度(位元組)越短越好;可推斷聯合索引用了幾列
ref索引比較值來源const(常數)、func、列名、NULL
rows預估掃描行數越小越好;結合 filtered 估算實際返回行
filtered按條件過濾後剩餘百分比100 表示無額外過濾;低值暗示索引選擇性差
Extra額外資訊見下表

Extra 關鍵值含義

值含義優化方向
Using index覆蓋索引,僅讀索引不回表優,設計覆蓋索引
Using whereServer 層過濾常見,若型別=ALL 需加索引
Using temporary需建立臨時表(ORDER BY/GROUP BY 不同列)優化索引順序、避免文件排序
Using filesort需外部排序加索引匹配 ORDER BY、增大 sort_buffer_size
Using index conditionICP (Index Condition Pushdown)優,下推條件到存儲引擎
Using join bufferJoin 使用緩衝區加駆動表索引、調整 join_buffer_size
Impossible WHEREWHERE 條件永假檢查 SQL 邏輯
Distinct找到第一匹配行即停止優

type 類型效能階梯(由優到劣)

  1. system:表僅一行(系統表)
  2. const:主鍵/唯一索引等值查詢,最多一行
  3. eq_ref:唯一/主鍵索引 Join,每行匹配一行
  4. ref:非唯一索引等值查詢/Join
  5. range:索引範圍掃描(>, <, >=, <=, BETWEEN, IN)
  6. index:全索引掃描
  7. ALL:全表掃描(最差)

實戰優化清單

  1. 確保 type 至少達到 ref 或 range。
  2. key 不為 NULL,key_len 合理。
  3. rows × filtered/100 ≈ 實際返回行,數量級可接受。
  4. Extra 無 Using temporary/Using filesort,有 Using index/Using index condition。
  5. 多表 Join:駆動表(先讀)應有高選擇性索引,被駆動表 Join 欄位有索引。
copyright © 萬盛學電腦網 all rights reserved