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

MySQL EXPLAIN 執行計劃完整解讀指南:索引優化核心參考

     編輯:MySQL 資料庫相關知識

EXPLAIN 顯示 MySQL 如何利用索引處理 SELECT 與連接表,是撰寫高效查詢、選擇優質索引的核心工具。

使用方式

EXPLAIN SELECT surname, first_name FROM a, b WHERE a.id = b.id;

輸出欄位詳細解釋

欄位說明
table該行資料涉及的資料表
type關鍵欄位,連接類型,效率由高到低:
system > const > eq_ref > ref > range > index > ALL
possible_keys可能使用的索引;為空表示無可用索引
key實際使用的索引;NULL 表示未使用索引。可用 USE INDEX 強制或 IGNORE INDEX 忽略
key_len使用索引長度;不失精度下越短越好
ref索引的哪一欄被使用,可能為常數
rowsMySQL 預估需掃描的行數
Extra額外資訊。壞訊號:Using temporary、Using filesort 表示無法用索引,查詢極慢

Extra 欄位常見值含義

  • Distinct:找到第一匹配行即停止搜尋
  • Not exists:LEFT JOIN 優化,找到匹配行即停止
  • Range checked for each Record (index map:#):無理想索引,極慢
  • Using filesort:需額外排序步驟,**需優化**
  • Using index:僅從索引取得資料(覆蓋索引),效能佳
  • Using temporary:建立臨時表,**需優化**
  • Where used:使用 WHERE 限制匹配行

連接類型詳細說明(效率高→低)

  • system:表僅一行(系統表)
  • const:主鍵/唯一索引查單行,視為常數
  • eq_ref:連接時每前表行精確匹配一行,用於主鍵/唯一鍵
  • ref:非唯一鍵或最左前綴,匹配行數越少越好
  • range:索引範圍掃描(>、<、BETWEEN)
  • index:全索引掃描(優於 ALL)
  • ALL:全表掃描,**極差,應避免**
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved