索引是查詢效能的關鍵,但錯誤的寫法會導致索引失效,造成全表掃描。本文整理實戰中常見的索引失效與生效場景,助你寫出高效 SQL。
❌ 索引失效的 6 大典型場景
- WHERE 條件使用不等於運算子:
WHERE column != 'value' 將無法使用索引。
- WHERE 條件對欄位使用函數:
WHERE DAY(date_col) = 1 導致索引失效,應改寫為範圍查詢。
- JOIN 關聯欄位資料型別不一致:主鍵與外鍵型別必須完全相同,否則即使建立索引也會被忽略。
- LIKE/REGEXP 以萬用字元開頭:
LIKE '%abc' 無法用索引;LIKE 'abc%' 則可正常使用。
- ORDER BY 條件非查詢條件表達式:且涉及多表查詢時,索引對排序加速效果有限。
- 欄位基數過低(重複值極多):如性別(M/F)、狀態(0/1),建立索引收益極低,優化器傾向全表掃描。
✅ 索引生效的通用原則
除上述失效場景外,以下情況索引通常有效:
- WHERE 條件欄位有索引
- ORDER BY 排序欄位有索引
- JOIN 關聯欄位(主鍵/外鍵)有索引且型別一致
實戰建議:若不確定索引是否生效,使用 EXPLAIN 分析執行計畫,對比執行時間即可驗證。