索引是查詢效能的生命線,但濫建索引反而拖垮寫入效能。本文提煉 7 條索引選擇鐵律,結合 EXPLAIN 實戰分析,助你精準命中最優索引策略。
CREATE INDEX idx_id ON emp (id); DROP INDEX idx_id ON emp;
EXPLAIN SELECT * FROM emp WHERE year >= 2014;
重點關注 type(all/index/range/ref/eq_ref/const/system)、key(實際用到的索引)、rows(預估掃描行數)、Extra(Using where/Using index/Using filesort 等)。
SELECT name FROM emp WHERE year >= 2014 → 索引應建在 year,而非 name。(a,b,c) 僅能支援 a、a,b、a,b,c 的查詢,b、c、b,c 無法命中。Extra 顯示 Using index,極大提升效能。WHERE a=1 AND b>2 AND c=3 中,c 即使在複合索引中也失效。MIN()/MAX() 可直接走索引極值,無需掃描;ORDER BY/GROUP BY 若符合最左前綴,可直接利用索引有序性避免 filesort;SELECT key_part3 FROM t WHERE key_part1=1)可直接在索引樹完成,不訪問資料頁。EXPLAIN 為準,而非經驗臆測;ANALYZE TABLE 更新統計資訊,避免優化器誤判;pt-online-schema-change 避免鎖表;sys.schema_unused_indexes 視圖輔助)。