使用时有什么不同(性能): 答:
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)
答案 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)
,因此至少在该测试中它根本没有性能差异。