什么是更快的IN或OR?

时间:2009-07-13 14:32:25

标签: tsql optimization profiling performance sql-optimization

在T-SQL中什么更快?

DELETE * FROM ... WHERE A IN (x,y,z)

或者

DELETE * FROM ... WHERE A = x OR A = y OR A = z

在我的情况下,x,y和z是存储过程的输入参数。而且我正试图尽我最大的能力来获得DELETE和INSERT语句的性能。

9 个答案:

答案 0 :(得分:14)

不要想;轮廓。

在考虑速度问题时,我敦促你不要依赖直觉,你的或任何其他人的直觉。相反,尝试两种选项,进行某种分析/运行时测量,然后找出,这在您的环境中更快。

答案 1 :(得分:11)

“IN”将被翻译成一系列“OR”...如果您查看带有“IN”的查询的执行计划,您会看到它已将其展开。

在我看来,使用“IN”更加清晰,特别是在较大的查询中,它使其更具可读性。

答案 2 :(得分:4)

在测试服务器上编写两个存储过程,一个使用IN,另一个使用OR。运行每个程序10,000(或1,000,000,或其他)次,并比较时间。

一般来说,这是解决哪种方法更快的问题的“唯一”方法:编写简单的时序测试用例,并多次运行它们。

答案 3 :(得分:3)

SQL Server中,优化程序将为这些查询生成相同的计划。

答案 4 :(得分:2)

他们应该根据我的经验生成相同的计划

看看计划

答案 5 :(得分:1)

如果A是计算,则使用IN执行一次,使用OR执行N次。

答案 6 :(得分:1)

无论A是计算还是列,看起来像SQL Server 2005将IN转换为OR子句。

答案 7 :(得分:1)

SQL Server下最快的是使用带有INNER JOIN的DELETE。有三个值,你不会注意到差异,但有更多的值(我们做了几千),差异是现象。您可以将您的值存入临时表,然后加入其中。

E.g。

DELETE C
FROM Customer AS C INNER JOIN #ValuesToDelete AS D ON C.CustID = D.CustID

您还可以添加可选的where子句。

答案 8 :(得分:0)

它必须完全相等。大多数RDMBS将IN转换为ORs

当然,如果您认为从INsORs的翻译耗费时间很长,则ORs的句子会更快; - )

更新:我在考虑A是一个专栏。