EXPLAIN 分析執行計劃的習慣❌ 在 SELECT 欄位(id/title/content)建索引 → 無效
✅ 在 WHERE/ORDER BY 條件欄位(如 cat_id)建索引 → 高效
SELECT col1, col2 FROM tbl ORDER BY sort_col LIMIT offset, limit;
-- 優化:sort_col 建單列索引
SELECT ... FROM tbl WHERE colX = val ORDER BY sort_col LIMIT ...;
-- 優化:建聯合索引 (colX, sort_col)
SELECT ... FROM tbl WHERE colX IN (v1,v2,...) ORDER BY sort_col LIMIT ...;
-- 聯合索引 (colX, sort_col) 此處失效(Using where; Using filesort)
-- 嘗試 UNION 拆分 + 索引,實測效率反而更低
-- 建議:強制使用排序索引 FORCE INDEX
-- ❌ 無法用索引
SELECT * FROM tbl ORDER BY YEAR(date) LIMIT 0,30;
-- ✅ 改用覆蓋索引或冗餘欄位
SELECT * FROM tbl WHERE uid=1 ORDER BY x,y LIMIT 0,10;
-- 直覺索引 (x,y,uid) ❌
-- 最佳索引 (uid,x,y) ✅ -- MySQL 排序機制決定
每次加索引後必須 EXPLAIN 驗證!