-2

使用时有什么不同(在性能方面):A:

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)
4

2 回答 2

0

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

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

一种等效的方法是生成一个“位”列,并在该列上建立索引,但这有点离题。

于 2012-09-19T14:16:56.057 回答
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),所以至少在那个测试中它根本没有性能差异。

于 2012-09-19T14:24:22.747 回答