WHERE 子句条件排序对 MySQL 性能的影响
当使用多个条件构建复杂查询时,这些条件的顺序可能会影响MySQL 的性能。特定条件(例如按公司 ID 过滤)可以显着减少检查的行数。
问题:
考虑以下两个具有不同条件排序的查询:
查询 1:
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
查询2:
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)
这些条件的顺序会影响MySQL的效率吗?
答案:
WHERE子句条件的顺序确实会影响MySQL在特定情况下的性能。请考虑以下示例:
查询 3:
SELECT myint FROM mytable WHERE myint >= 3 OR myslowfunction('query #1', myint) = 1;
查询 4:
SELECT myint FROM mytable WHERE myslowfunction('query #2', myint) = 1 OR myint >= 3;
这些查询之间的唯一区别是 OR 条件中操作数的顺序。 “myslowfunction”是一个故意延迟一秒钟的函数。查询执行显示:
这表明,当一个慢速函数出现在 OR 条件的左侧且其操作数并不总是为真时,该函数的执行频率会更高。
结论:
总之,WHERE 子句中的条件顺序会影响 MySQL 性能,因为短路。为了优化性能,请尽早将预计会显着减少检查行数的条件(例如公司 ID)放入条件链中。
以上是WHERE 子句条件排序如何影响 MySQL 查询性能?的详细内容。更多信息请关注PHP中文网其他相关文章!