SQL 執行慢?先 EXPLAIN。它揭示優化器如何訪問表、使用哪個索引、連接順序、臨時表/檔案排序等關鍵資訊,是優化的「X 光片」。
SELECT、DELETE、INSERT、REPLACE、UPDATE(5.6+)
| 欄位 | 關鍵含義 | 優化目標 |
|---|---|---|
id | 查詢序號,越大越先執行 | — |
select_type | SIMPLE/PRIMARY/SUBQUERY/DERIVED/UNION 等 | 衍生表物化優化 |
table | 訪問的表/衍生表別名 | — |
partitions | 匹配的分區 | 分區裁剪驗證 |
type | 訪問類型:system > const > eq_ref > ref > range > index > ALL | 至少達 ref,避免 ALL |
possible_keys | 理論可用索引 | — |
key | 實際使用索引 | 若為 NULL 需補索引 |
key_len | 索引長度(字節),判斷聯合索引用了幾列 | — |
ref | 與索引比較的列/常數 | — |
rows | 預估掃描行數(統計資訊為準) | 越小越好 |
filtered | 按表條件過濾後剩餘比例 % | 越大越好 |
Extra | Using index/Using where/Using temporary/Using filesort 等 | 避免 temporary/filesort |
sort_buffer_sizeANALYZE TABLE 更新-- 1. OR 條件未全覆蓋索引 WHERE a=1 OR b=2 -- 2. 聯合索引非最左前綴 INDEX (a,b,c) WHERE b=1 -- 3. LIKE 以 % 開頭 WHERE name LIKE '%abc' -- 4. 字串欄位比較數字(隱含轉換) WHERE varchar_col = 123 -- 5. 優化器判斷全表掃描更快(rows > 30% 表大小) -- 可用 FORCE INDEX 強制,但需測試
EXPLAIN ANALYZE SELECT * FROM t WHERE c1 > 100; -- 輸出實際執行時間、迴圈次數、實際掃描行數,精準定位熱點
pt-visual-explain 文字轉樹狀圖pt-query-digest 自動分析 Top N熟練讀懂 EXPLAIN,優化從「猜測」變為「確鑿」。