索引設計好壞直接決定資料庫吞吐量上限。本文凝練 8 大關鍵原則,涵蓋建立時機、組合索引最左前綴、NULL 處理、短索引、排序、LIKE、運算、負向條件,助您建立高效、可維護的索引策略。
建立 INDEX (a, b, c) 等同擁有 (a)、(a,b)、(a,b,c) 三個索引。最常用的過濾欄位放最左,依選擇性遞減排序。
NOT NULL DEFAULT '' 或具體預設值。長字串 (如 VARCHAR(255)) 若前 10~20 字元區分度已高,用 INDEX idx_col (col(10))。效益:索引體積 ↓、I/O ↓、快取命中率 ↑、查詢速度 ↑。
MySQL 單查詢只能用一個索引。若 WHERE 已用索引,ORDER BY 欄位若不在同一索引 → Using filesort。解法:建立涵蓋 WHERE + ORDER BY 的組合索引,或接受預設排序避免額外排序。
LIKE 'abc%' ✅ 索引範圍掃描LIKE '%abc%' / LIKE '%abc' ❌ 全表掃描-- ❌ 失效
WHERE YEAR(adddate) < 2007;
-- ✅ 生效
WHERE adddate < '2007-01-01';
任何 func(col)、col + 1、UPPER(col) 都會阻礙索引使用。
NOT IN → NOT EXISTS / LEFT JOIN ... IS NULL;id <> 3 → id > 3 OR id < 3 (視資料分布)。