| 欄位 | 含義 | 優化關注點 |
|---|---|---|
id | SELECT 識別符 | 越大越先執行;NULL=UNION 結果合併 |
select_type | 查詢類型 | SIMPLE, PRIMARY, UNION, DEPENDENT SUBQUERY(關聯子查詢, 慢), DERIVED(衍生表), SUBQUERY, UNION RESULT |
table | 訪問表/衍生表 | <derivedN>, <unionM,N> 臨時表無索引 |
type | **訪問類型 (核心)** | system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL |
possible_keys | 候選索引 | 為空=無索引可用 |
key | 實際使用索引 | NULL=未用索引;可 FORCE/IGNORE INDEX 干預 |
key_len | 索引長度(字節) | 推斷聯合索引用了幾列;越短越好 |
ref | 比較值來源 | const, 列名, func |
rows | 預估掃描行數 | 統計信息偏差大時誤導優化器;ANALYZE TABLE 更新 |
filtered | 過濾後剩餘百分比 (5.7+) | rows * filtered% ≈ 實際參與 Join 行數 |
Extra | **額外信息 (核心)** | 見下表 |
| 值 | 含義 | 優化方向 |
|---|---|---|
Using index | **覆蓋索引** (僅掃描索引樹) | **極佳**,設計覆蓋索引達成 |
Using where | Server 層過濾 | 嘗試 ICP 下推或建更好索引 |
Using index condition | **索引條件下推 ICP (5.6+)** | 好現象,二級索引 LIKE/範圍下推減少回表 |
Using temporary | 創建內部臨時表 | 優化 SQL 避免臨時表;增大 tmp_table_size 避免落盤 |
Using filesort | 額外排序 | 建索引匹配 ORDER BY;或接受小結果集排序 |
Using join buffer (Block Nested Loop) | Join 無索引用 Join Buffer | 給關聯列加索引;調大 join_buffer_size |
Select tables optimized away | 聚合查詢優化掉表訪問 | 好現象 (如 COUNT(*) 無 WHERE) |
Impossible WHERE | WHERE 條件恆假 | 檢查 SQL 邏輯 |
No tables used | 無表查詢 | 正常 |
Distinct | 優化 DISTINCT (找到第一匹配停止) | 好現象 |
Not exists | LEFT JOIN 優化 (匹配到停止) | 好現象 |
Range checked for each record (index map: N) | 無理想索引,逐行檢查用哪個索引 | **極慢**,必須加索引 |
>, >=, <, <=, BETWEEN, IN, LIKE 'prefix%'),**可接受**。key_len 幾列?EXPLAIN ANALYZE SELECT ...; -- 實際執行,顯示實際耗時、行數、循環、I/O、內存
EXPLAIN FORMAT=TREE SELECT ...; -- 樹狀結構,直觀 Join 順序、並行、物化