在掌握了索引的建立、刪除與類型之後,最關鍵的一步是決定在哪些資料欄上建立索引才能發揮最大效益。並非所有欄位都適合加索引,盲目建立反而會拖慢寫入效能。根據查詢模式,主要有三類欄位最適合建立索引:
查詢條件中常被用來篩選資料的欄位,是建立索引的首選對象。例如:
SELECT user FROM shili WHERE user = '張三';
此處 user 欄位出現在 WHERE 條件中,適合建立索引;而 SELECT 後的欄位清單則不適合。
多表查詢時,ON 或 USING 條件中參與連接的欄位(如外鍵),加上索引可大幅提升連接效能。
頻繁出現在 ORDER BY 或 GROUP BY 子句中的欄位,建立索引可避免檔案排序,直接利用索引有序特性輸出結果。
即使欄位建立了索引,MySQL 也僅在特定操作符下使用索引:
>, >=, =, <, <=BETWEENINLIKE:只有當通配符不在開頭時才會使用索引。-- 可使用索引(通配符在結尾)
SELECT id FROM user WHERE user LIKE 'h%';
-- 無法使用索引(通配符在開頭)
SELECT id FROM user WHERE user LIKE '%in';
以 % 或 _ 開頭的模式會導致全表掃描,這是優化時必須注意的陷阱。
索引選擇不應只依理論,需結合 EXPLAIN 分析實際執行計畫,觀察 key、rows、Extra 欄位,驗證索引是否真正被命中。同時遵循「最左前綴」原則,為複合索引設計合理的欄位順序,才能在讀寫平衡中獲得最佳效能。