MySQL 4.0.1+ 支援。開啟:my.ini 設 query_cache_type=1、query_cache_size。
SELECT SQL_NO_CACHE ...。query_cache_type=2 + SELECT SQL_CACHE ...。注意:緩存不自動處理大小寫/空格,SQL 寫法必須統一。
當滿足條件行數超過表總行數 ~30%(經驗值),優化器放棄索引改走全表掃描,因為索引回表+排序成本高於順序掃描。具體閾值隨存儲引擎不同而異。
MySQL 單表查詢最多使用一個索引。若 WHERE 已用索引,ORDER BY 無法再用索引排序 → filesort 慢。
解決:建立複合索引覆蓋 WHERE + ORDER BY 列。
ALTER TABLE sales DROP INDEX name, ADD INDEX (name, sale_date);
-- 查詢:WHERE name='x' ORDER BY sale_date DESC 即可用索引排序
前提:WHERE 不能包含排序列,否則排序列無單獨索引導致查詢變慢。
MySQL 執行前分析 WHERE 條件,若邏輯永假(如 value < 100 AND value > 200 或 name='a' AND name='b'),直接返回空結果,不掃描表。
驗證:EXPLAIN SELECT ... 中 table 顯示 NULL 或 Impossible WHERE。