Web 開發者除程式效能外,資料庫存取速度同樣關鍵。本文介紹 MySQL 十大優化技巧前四招。
MySQL 內建 Query Cache,相同查詢命中快取極快。但非確定性函數會導致快取失效:
-- 快取失效:CURDATE() 每次不同
SELECT username FROM user WHERE signup_date >= CURDATE();
-- 快取生效:應用層產生固定日期字串
$today = date("Y-m-d");
SELECT username FROM user WHERE signup_date >= '$today';
原理:快取以 SQL 文本為鍵,含動態函數的 SQL 永不重複,無法命中。
EXPLAIN SELECT ... 顯示索引使用、掃描行數、排序、臨時表等資訊,快速定位瓶頸。phpMyAdmin 直接可視化輸出。
案例:忘記在 group_id 加索引導致 type=ALL (全表掃描);加上索引後變為 type=ref,rows 大幅下降。


明知只需一行 (如存在性檢查) 時加 LIMIT 1,引擎找到即停止,避免全表/全索引掃描。
-- 不佳
SELECT * FROM user WHERE state = 'Alabama';
-- 推薦
SELECT 1 FROM user WHERE state = 'Alabama' LIMIT 1;
索引不限於主鍵/唯一鍵。任何 WHERE、JOIN、ORDER BY 涉及的欄位都應評估建立索引。phpMyAdmin 可視化索引基數分佈輔助決策。

前四招聚焦查詢層面:快取機制理解、EXPLAIN 成必備技能、LIMIT 1 止損、索引覆蓋搜尋欄位。下篇將介紹進階優化技巧。