| 欄位 | 含義 | 關鍵判讀 |
|---|---|---|
id | 查詢序號 | 同 id 從上往下執行;id 越大越優先 |
select_type | 查詢類型 | SIMPLE、PRIMARY、SUBQUERY、DERIVED、UNION 等 |
table | 存取的表 | 別名、衍生表 |
partitions | 匹配的分區 | 分區表才顯示 |
type | 存取類型 (核心) | system > const > eq_ref > ref > range > index > ALL (由好到壞) |
possible_keys | 可能用到的索引 | 為 NULL 表示無索引可用,需檢查 WHERE/JOIN 條件 |
key | 實際使用的索引 | 為 NULL 表示全表掃描;可用 FORCE INDEX 強制 |
key_len | 索引使用長度 (bytes) | 越短越好;可推斷複合索引用了幾個欄位 |
ref | 與索引比較的值 | const、func、NULL、欄位名 |
rows | 預估掃描行數 | 越少越好;配合 filtered 估算實際回傳 |
filtered | 按條件過濾後剩餘百分比 | 100 表示無額外過濾 |
Extra | 額外資訊 (關鍵) | 見下表 |
| Extra 值 | 含義 | 優化方向 |
|---|---|---|
Using index | 覆蓋索引,僅讀索引不回表 | ✅ 極佳,維持 |
Using where | Server 層過濾 | 若 rows 大,嘗試建立複合索引下推 (ICP) |
Using index condition | ICP (Index Condition Pushdown) | ✅ 5.6+ 自動優化 |
Using temporary | 建立臨時表 (通常 GROUP BY/ORDER BY) | ⚠️ 嘗試索引排序、增加 tmp_table_size |
Using filesort | 外部排序 (無索引順序) | ⚠️ 加索引匹配 ORDER BY、避免 SELECT * |
Using join buffer (Block Nested Loop) | Join 無索引,使用緩衝區 | ⚠️ 給 JOIN 欄位加索引 |
Impossible WHERE | WHERE 條件永假 | ✅ 優化器直接返回空 |
Select tables optimized away | 聚合函數直接用索引 | ✅ 極佳 |
No tables used | 無 FROM 子句 | — |
>, <, BETWEEN, IN, LIKE 'prefix%')。type = ALL → 檢查 possible_keys,建立適當索引。key_len 過長 → 複合索引欄位過多或 VARCHAR 過長,考慮前綴索引。rows × filtered% 過大 → 條件下推不足,調整索引順序或改寫 SQL。Using temporary / filesort → 索引覆蓋 ORDER BY/GROUP BY 欄位。Using join buffer → 給 JOIN ON 欄位加索引,小表驅動大表。EXPLAIN FORMAT=JSON SELECT ...; -- 含成本估算、索引選擇細節
EXPLAIN FORMAT=TREE SELECT ...; -- 8.0.16+ 可視化樹狀結構