MySQL 查詢優化器的核心邏輯:**「盡早、盡多地過濾掉不需要的行」**。雖然聽起來違背直覺,但越早減少候選行數,後續比較成本越低,查詢越快。
WHERE col1 = '條件A' AND col2 = '條件B'
優化器會選擇「最小阻力路徑」——先套用條件 B(250 行),再從中篩選同時符合 A 的 5 行。若先套用條件 A,需掃描 1,000 行,成本高 4 倍。
MySQL 透過**索引統計資訊**判斷各條件選擇率,自動決定最佳順序。
三欄索引 (LastName, FirstName, Title) 實際可作為:
(LastName, FirstName, Title) 完整索引(LastName, FirstName) 前綴索引(LastName) 前綴索引但 (FirstName, Title) 或 (Title) **無法** 使用此索引,因非最左開頭。
ANALYZE TABLE 更新統計EXPLAIN 觀察優化器實際選擇的索引與掃描行數