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

MySQL EXPLAIN 詳解:查詢效能分析與優化實戰指南

     編輯:MySQL 資料庫相關知識

善用 EXPLAIN 看穿 SQL 執行計畫

同樣的查詢需求,不同寫法效能可能相差數倍。MySQL 提供 EXPLAIN 關鍵字,能在不實際執行查詢的情況下,預覽優化器的執行計畫,包含掃描行數、索引使用狀況、連接順序等關鍵資訊,是 SQL 調優的核心工具。

基本用法

EXPLAIN SELECT id, username FROM userinfo WHERE username LIKE '%peng%';

輸出欄位深度解析

欄位含義關鍵觀察點
idSELECT 識別碼,查詢序列號數字越大越先執行;相同則由上而下
select_type查詢類型SIMPLE(無子查詢/UNION)、PRIMARY(最外層)、SUBQUERY、DERIVED(衍生表)等
table存取的表名確認是否為預期資料表
type連接/存取類型 最重要效能由好到差:system > const > eq_ref > ref > range > index > ALL(全表掃描)
possible_keys理論上可用的索引若為 NULL,代表無索引可用,需考慮建立索引
key實際使用的索引若為 NULL,表示未用到索引
key_len索引長度(位元組)越短越好;可推斷聯合索引用到第幾個欄位
ref與索引比較的欄位或常數const、func、欄位名等
rows預估掃描行數越小越好;為統計估算值,非精確值
Extra額外資訊 關鍵Using index(覆蓋索引)、Using where、Using filesort(需外部排序)、Using temporary(建立臨時表)

實戰輸出範例解讀

id: 1
select_type: SIMPLE
table: userinfo
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 6
Extra: Using where

診斷: type: ALL 表示全表掃描,key: NULL 未使用索引,Extra: Using where 只在 Server 層過濾。若資料量大,效能極差。解決方案:於 username 建立索引,並避免 LIKE '%...%' 導致索引失效。

優化核心口訣

  1. 盡量讓 type 達到 range 或 ref 以上,避免 ALL。
  2. 善用覆蓋索引(Extra 出現 Using index),減少回表。
  3. 警惕 Using filesort / Using temporary,適當加索引或調整 ORDER BY/GROUP BY 消除。
  4. rows 越小越好,配合 LIMIT 限制掃描範圍。

更詳細的欄位定義請參考 MySQL 官方手冊。掌握 EXPLAIN 讀法,即掌握 SQL 優化的「聽診器」。

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