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

MySQL EXPLAIN 使用介紹(精簡版)

     編輯:MySQL 資料庫相關知識

EXPLAIN 核心列速查與連接類型優劣對照表

本文為 EXPLAIN 精簡參考,聚焦輸出列含義、連接類型排序、Extra 關鍵值、實戰判讀口訣。完整深度解析請參考「MySQL EXPLAIN 執行計劃詳解」。

一、基本用法

EXPLAIN SELECT * FROM `users` WHERE id = 1;

二、輸出列速查

列含義關鍵判讀
table涉及的表(或派生表 <derivedN>)-
type核心:訪問策略/連接類型優→劣:system > const > eq_ref > ref > range > index > ALL
possible_keys可能用到的索引為 NULL 表示無索引可用,需檢查 WHERE 條件列
key實際選用的索引為 NULL 表示全掃;可用 USE/FORCE/IGNORE INDEX 干預
key_len使用索引長度(字節)越短越好;組合索引可判斷用了幾列
ref與索引比較的引用(常數/列/函數)const 表示常數等值
rows預估掃描行數越小越好;偏大需 ANALYZE TABLE
Extra額外執行信息關注 Using index(好)、Using temporary/filesort(需優化)

三、Extra 關鍵值對照

值含義優化方向
Using index覆蓋索引,不回表優秀,設計覆蓋索引可獲取
Using whereServer 層 WHERE 過濾正常;若 type=ALL 需加索引
Using temporary創建臨時表(ORDER BY/GROUP BY 列不一致)需優化:調整索引順序
Using filesort文件排序(無索引支持 ORDER BY)需優化:添加排序列索引
Using index conditionICP 索引條件下推 (MySQL 5.6+)優化特性
Distinct/Not exists早期終止優化正常

四、連接類型詳細解釋(優→劣)

  1. system:表僅一行(const 特例)
  2. const:主鍵/唯一索引等值,最多一行,極快
  3. eq_ref:唯一索引/主鍵連接,每行匹配一行,最佳連接
  4. ref:非唯一索引/最左前綴連接,匹配少行則好
  5. range:索引范圍掃描(>、<、BETWEEN、IN)
  6. index:全索引掃描(比 ALL 快)
  7. ALL:全表掃描,**最差**,需加索引優化

五、實戰判讀口訣

一看 type:const/eq_ref/ref/range 好,ALL/index 差
二看 key:預期索引是否被用上,key_len 組合索引用幾列
三看 rows:預估掃描行數是否合理
四看 Extra:Using index 好,Using temporary/filesort 壞
五對比 possible_keys vs key:為何優化器捨優選劣?

六、常見優化場景速查

  • type=ALL → 加索引、檢查 WHERE 條件列
  • Using filesort → 添加 ORDER BY 列索引、組合索引包含排序列
  • Using temporary → 調整 GROUP BY/ORDER BY 列順序與索引一致
  • key=NULL 但有 possible_keys → FORCE INDEX 強制、檢查條件是否命中最左前綴
  • 隱式類型轉換(字符串列比數字) → 修正應用層參數類型
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved