IN vs = Where子句

时间:2010-08-04 16:21:53

标签: sql-server tsql ssrs-2008

我尝试创建标准化的SQL脚本以用于我的SSRS报告。如果我希望发表如下声明:

Select * from mytable

并在where子句中使用SQL变量(SSRS参数),使用它有任何速度优势:

where field = @MyField

VS。

字段IN(@MyField)

我知道第二个选项支持多个选择和单个选择,而第一个选项仅支持单个选项。

如果我使用IN语句编写所有查询以获得一致性,是否有任何性能命中?

3 个答案:

答案 0 :(得分:3)

没有性能损失。优化器将IN转换为OR运算的一系列=运算。

作为旁注,我希望你在实际查询中并没有真正使用SELECT *。

答案 1 :(得分:0)

对于一个参数,优化器会在实际执行语句中将IN更改为=。

因为这两个论点都是Sargeble (Joe Stefanelli感谢关注);如果你在in子句中有序列值,可以找到性能上的差异,例如IN (1,2,3,4,5,6)between 1 and 6慢,因为对于IN,必须在这种情况下为每个值读取索引6次只有一次。

答案 2 :(得分:0)

如果IN子句中有大量项目

,性能会变慢