我尝试创建标准化的SQL脚本以用于我的SSRS报告。如果我希望发表如下声明:
Select * from mytable
并在where子句中使用SQL变量(SSRS参数),使用它有任何速度优势:
where field = @MyField
VS。
字段IN(@MyField)
我知道第二个选项支持多个选择和单个选择,而第一个选项仅支持单个选项。
如果我使用IN语句编写所有查询以获得一致性,是否有任何性能命中?
答案 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子句中有大量项目
,性能会变慢