首页 >数据库 >mysql教程 >WHERE 子句条件排序如何影响 MySQL 查询性能?

WHERE 子句条件排序如何影响 MySQL 查询性能?

Patricia Arquette
Patricia Arquette原创
2024-12-29 12:31:14883浏览

How Does WHERE Clause Condition Ordering Affect MySQL Query Performance?

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”是一个故意延迟一秒钟的函数。查询执行显示:

  • 查询 3:myslowfunction 被调用四次(myint 值 1、2、3、4)。
  • 查询 4:myslowfunction 被调用七次( myint 值 1、2、3、4、5、6、 7).

这表明,当一个慢速函数出现在 OR 条件的左侧且其操作数并不总是为真时,该函数的执行频率会更高。

结论:

总之,WHERE 子句中的条件顺序会影响 MySQL 性能,因为短路。为了优化性能,请尽早将预计会显着减少检查行数的条件(例如公司 ID)放入条件链中。

以上是WHERE 子句条件排序如何影响 MySQL 查询性能?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn