Where 子句條件排序與MySQL 效能
在查詢包含大量條件且特定條件顯著縮小結果集的場景中, WHERE子句中的條件順序會影響MySQL 效能。
請考慮以下內容場景:
SELECT * FROM clients WHERE (firstname LIKE :foo OR lastname LIKE :foo OR phone LIKE :foo) AND (firstname LIKE :bar OR lastname LIKE :bar OR phone LIKE :bar) AND company = :ugh;
SELECT * FROM clients WHERE company = :ugh AND (firstname LIKE :foo OR lastname LIKE :foo OR phone LIKE :foo) AND (firstname LIKE :bar OR lastname LIKE :bar OR phone LIKE :bar);
第一個查詢中,根據公司欄位進行過濾的條件放在WHERE子句的開頭。此條件有效地縮小了後續條件需要評估的行數。
在第二個查詢中,條件的順序相反。基於公司欄位過濾的條件在其他條件之後進行評估。
根據資料的分佈,條件的順序可能會影響效能。透過將顯著減少結果集的條件放在 WHERE 子句的開頭,MySQL 可以儘早應用它,並避免評估不符合該條件的行的後續條件。
這種最佳化稱為「短」 -電路。 「如果給定行的開頭條件評估為 false,MySQL將立即丟棄該行,而不評估其餘條件。會對性能產生重大影響。 >查詢執行計劃和時序
以上是WHERE 子句條件排序如何影響 MySQL 查詢效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!