一尘不染

WHERE子句中的条件顺序是否会影响MySQL性能?

mysql

假设我有一个漫长而昂贵的查询,里面挤满了条件,搜索了大量的行。我还有一个特殊条件,例如公司ID,它将限制需要大量搜索的行数,将其范围从数十万缩小到几十。

我这样做是否会对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)

阅读 652

收藏
2020-05-17

共1个答案

一尘不染

不,顺序应该不会有太大的不同。当发现哪些行与条件匹配时,将针对每一行检查整个条件(通过布尔逻辑组合的所有子条件)。

一些智能数据库引擎将尝试猜测条件的哪些部分可以更快地进行评估(例如,不使用内置函数的事物),然后先评估那些条件,然后再评估更复杂的(估计)元素。这是由数据库引擎而非SQL确定的。

2020-05-17