EXPLAIN 關鍵欄位速查
| 欄位 | 含義 | 關注重點 |
| select_type | 查詢類型 | SIMPLE、PRIMARY、SUBQUERY、DERIVED 等 |
| table | 輸出結果集的表 | 驅動表、被驅動表順序 |
| type | 連接類型 | system > const > eq_ref > ref > range > index > ALL,ALL=全表掃描需優化 |
| possible_keys | 可能用到的索引 | 候選索引 |
| key | 實際使用的索引 | NULL=未用索引 |
| key_len | 索引長度 | 判斷複合索引用了幾個欄位 |
| rows | 預估掃描行數 | 越小越好 |
| Extra | 執行情況說明 | Using index、Using where、Using temporary、Using filesort 等 |
實戰案例:優化前後對比
優化前:sales 表全表掃描 (type=ALL)
EXPLAIN SELECT SUM(moneys) FROM sales a, companys b
WHERE a.company_id = b.id AND a.year = 2006;
-- 結果片段
table | type | possible_keys | key | key_len | rows | Extra
b | index| PRIMARY | PRIMARY| 4 | 1 | Using index
a | ALL | NULL | NULL | NULL | 12 | Using where
對 sales.year 建立索引後:type 變 ref,rows 12→3
CREATE INDEX idx_year ON sales(year);
EXPLAIN SELECT SUM(moneys) FROM sales a, companys b
WHERE a.company_id = b.id AND a.year = 2006;
-- 結果片段
table | type | possible_keys | key | key_len | rows | Extra
b | index| PRIMARY | PRIMARY| 4 | 1 | Using index
a | ref | year | year | 4 | 3 | Using where
調優閉環
- 慢查詢日誌 / SHOW PROCESSLIST 定位問題 SQL。
- EXPLAIN 分析執行計畫,找出 ALL、Using temporary、Using filesort。
- 補索引、改寫 SQL、調整連接順序。
- 再次 EXPLAIN 驗證 type 提升、rows 下降。
- 上線觀察慢查詢日誌確認生效。