索引設計優劣直接決定查詢效能。本文凝練 8 大核心原則,涵蓋建立時機、複合索引最左前綴、NULL 值陷阱、短索引、排序優化、LIKE 模式、運算子失效與否定條件改寫。
查詢:WHERE area='beijing' AND age=22
(area, age, salary) 等效於 (area,age,salary)、(area,age)、(area) 三索引NOT NULL DEFAULT '' 或 0,避免 NULL 污染索引ALTER TABLE tbl ADD INDEX idx_name (name(10)); -- 僅索引前 10 字元
SELECT COUNT(DISTINCT LEFT(col,10))/COUNT(*))(where_col, order_col)| 模式 | 索引 | 說明 |
|---|---|---|
LIKE 'abc%' | ✅ 使用 | 前綴固定,可走索引範圍掃描 |
LIKE '%abc%' | ❌ 不用 | 前導萬用字元,全表掃描 |
LIKE '%abc' | ❌ 不用 | 同上 |
全文搜尋場景請用 Fulltext 索引或外部搜尋引擎。
-- ❌ 失效:每行計算 YEAR()
WHERE YEAR(adddate) < 2007
-- ✅ 生效:常數範圍
WHERE adddate < '2007-01-01'
函數、運算、型別轉換皆會導致索引失效。
NOT IN、<>、!= → 全表掃描NOT IN → NOT EXISTS;id <> 3 → id > 3 OR id < 3EXPLAIN 確認 type=ref/range、key 非 NULL、rows 最小化Using index 避免回表ANALYZE TABLE 更新統計資訊Handler_read_key / Handler_read_rnd_next 比率索引是資料庫效能的杠桿,精準設計勝過盲目堆砌。