当前位置: 首页 > 面试题库 >

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

闾丘山
2023-03-14
问题内容

假设我有一个漫长而昂贵的查询,里面挤满了条件,搜索了大量的行。我还有一个特殊条件,例如公司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)

问题答案:

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

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



 类似资料:
  • 问题内容: 我在表中有两个索引字段- 和(单个索引,不是复合索引)。 的字段值非常有限(假设它仅为0或1),因此50%的表记录具有相同的。另一方面,值来自更大的集合,因此具有相同值的记录量很小。 这些查询中的任何一个都会比另一个查询运行得更快吗? 另外,如果两个字段都没有索引,是否会改变行为? 问题答案: SQL被设计为一种声明性语言,而不是一种过程性语言。因此,查询优化器应该 不会 考虑在决定如

  • 我对一个< code>select有一些奇怪的问题。< code>WHERE子句中的顺序可能会影响结果吗? 这是我的选择: 这将重现这个结果:http://dl.dropbox.com/u/4892450/sqlSelectProblem/select1.PNG 当我使用这个条件时: (不同的顺序) 我得到一个不同的结果(参见 列): http://dl.dropbox.com/u/4892450

  • 问题内容: 在对bat Logic-2进行编码时,我在下面列出的第一个方法中输入了loneSum问题。对于所有测试,只有一个测试是正确的。它唯一失败的是所有变量都等于同一整数。但是,当我在线查找解决方案时,得到了下面列出的第二种方法,并且该方法行得通。我认为我的方法和正确的解决方案之间的唯一区别是“ else if(a == b && b == c){return 0;}”的位置。我的问题是条件的

  • 问题内容: 在对bat Logic-2进行编码时,我在下面列出的第一个方法中输入了loneSum问题。对于所有测试,只有一个测试是正确的。它唯一失败的是所有变量都等于同一整数。但是,当我在线查找解决方案时,得到了下面列出的第二种方法,并且该方法行得通。我认为我的方法和正确的解决方案之间的唯一区别是“ else if(a == b && b == c){return 0;}”的位置。我的问题是条件的

  • 如果我们有一个由col、col2、col3分区的配置单元表,那么在对该表执行SELECT时,如果我想在WHERE子句中指定这些列,它们是否必须以相同的顺序出现,以便利用分区?我的意思是,逻辑上是的,但无论我以什么顺序指定它们,HIVE编译器都不能理解它们的实际顺序。它应该能够在内部应用正确的顺序,因为HIVE已经知道正确的顺序是col2、col2、col3,所以它以这种方式使用它。HIVE在我们定

  • 问题内容: 我试图用谷歌搜索,但是没有运气。 我的开关很大,有些情况 显然 比其他情况 更常见 。 因此,我想知道订单是否真正保持原状,并且在“下”之前先测试“上”案例,因此可以更快地进行评估。 我想保留订单,但是如果它影响速度,那么重新排序分支将是一个好主意。 例如: 问题答案: 对switch语句重新排序没有任何效果。 查看Java字节码规范,可以将a编译为a 或一条指令,然后打开a 。A 总