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

使用 EXPLAIN 進行 MySQL 語句效能優化:輸出欄位完整解讀與實戰技巧

     編輯:MySQL 資料庫相關知識

EXPLAIN 是 MySQL 效能調優的核心工具。本文系統解讀各輸出欄位含義,從最優到最差的 type 類型、關鍵欄位 key/rows/Extra 解讀,助你快速定位慢查詢根因。

EXPLAIN 輸出欄位總覽

id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra

核心欄位深度解讀

select_type (查詢類型)

  • SIMPLE:無 UNION/子查詢的簡單 SELECT
  • PRIMARY:最外層查詢
  • UNION:UNION 中第二或之後的 SELECT
  • DEPENDENT UNION:依賴外部查詢的 UNION
  • UNION RESULT:UNION 結果集
  • SUBQUERY:子查詢
  • DEPENDENT SUBQUERY:相關子查詢
  • DERIVED:衍生表 (FROM 子查詢)

type (連接類型) —— 由優到劣

類型說明
system表僅一行 (系統表),const 特例
const最多一行匹配,查詢開始即讀取;用於 PK/Unique 索引所有部分與常數比較
eq_ref唯一索引掃描,JOIN 時每行匹配一行;最優 JOIN 類型
ref非唯一索引或最左前綴匹配,JOIN 時可能匹配多行
ref_or_null類似 ref,額外搜尋 NULL 值;子查詢優化常見
index_merge索引合併優化 (多索引交集/聯集)
unique_subquery替換 IN (SELECT PK ...) 子查詢,效率更高
index_subquery替換 IN (SELECT non-PK ...) 子查詢
range索引範圍掃描 (BETWEEN, IN, >, < 等)
index全索引樹掃描,性質接近 ALL
ALL全表掃描,最差情況

其他關鍵欄位

  • possible_keys:可能用到的索引
  • key:實際使用的索引 (為 NULL 表示無索引可用)
  • key_len:使用的索引長度 (判斷複合索引用了幾列)
  • ref:與 key 配合的比較值 (常數/欄位/函數)
  • rows:預估掃描行數 (越小越好)
  • Extra:額外資訊 (如 Using where、Using index (覆蓋索引)、Using temporary、Using filesort 等)

實戰判讀口訣

  1. 看 type:至少達 ref,避免 ALL/index
  2. 看 key:是否命中預期索引
  3. 看 rows:預估掃描行數是否合理
  4. 看 Extra:出現 Using filesort/Using temporary 需優化

善用 EXPLAIN,讓索引優化有的放矢。

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