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中文网其他相关文章!