“AND OR”在sql server中的用法

时间:2012-09-19 14:01:38

标签: sql sql-server sql-server-2008 tsql

使用时有什么不同(性能): 答:

SELECT Col1, Col2, Col3, col7 
  FROM xTable  
 WHERE (col1 > 0) 
   AND (col7 >= 0) 
    OR (col2 > 0)
   AND (col7 >= 0) 
    OR (col3 > 0) 
   AND (col7 >= 0)

B:并使用:

SELECT Col1, Col2, Col3, col7
  FROM xTable
 WHERE ( (col1 > 0) OR (col2 > 0) OR (col3 > 0) )
   AND (col7 >= 0)

2 个答案:

答案 0 :(得分:0)

出于所有意图和目的,它们的性能相同。要获得额外的纳秒,请尝试将(col7> = 0)子句放在B中。无论如何,优化器可以重写/重构查询,使它们具有相同的性能。

当人们真的想要快速地做这种事情时,他们会使用位图索引,除非我记得SQL Server没有这样做。

一种等效的方法是生成一个“位”列,并对该列进行索引,但这有点偏离主题。

答案 1 :(得分:0)

试图反对这个表

CREATE TABLE xTable
(
col7 INT PRIMARY KEY,
Col1 INT,
Col2 INT,
Col3 INT
)  

查询的两个版本都提供了相同的执行计划,其中col7 >= Scalar Operator((0))上的范围搜索和剩余谓词[Col1]>(0) OR [Col2]>(0) OR [Col3]>(0),因此至少在该测试中它根本没有性能差异。