【问题标题】:IN vs = in Where ClausesIN vs = in Where 子句
【发布时间】:2010-08-04 16:21:52
【问题描述】:

我尝试创建用于我的 SSRS 报告的标准化 SQL 脚本。如果我希望有这样的声明:

Select * from mytable

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

字段 = @MyField

VS。

输入字段 (@MyField)

我知道第二个选项同时支持多选和单选,而第一个选项只支持单选。

如果为了统一而使用 IN 语句编写所有查询,是否会影响性能?

【问题讨论】:

    标签: sql-server tsql ssrs-2008


    【解决方案1】:

    没有性能影响。优化器将 IN 转换为一系列 = 运算 ORed 在一起。

    附带说明一下,我希望您在实际查询中没有真正使用 SELECT *。

    【讨论】:

    • 不,当然不是。我只是在节省时间,而不是输入 Field1、field2 等。
    • 为什么不选择 * ?或者至少在Room - Android 中,就是这样。如果我错了,请纠正我。
    【解决方案2】:

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

    因为这两个参数都是Sargeble (Joe Stefanelli 感谢关注);性能差异可以通过您在 in 子句中有序列值的地方找到,例如 IN (1,2,3,4,5,6)between 1 and 6 慢,因为对于 IN 来说,在这种情况下,必须为每个值读取索引 6 次,每次之间只有一次.

    【讨论】:

    • 经过一番谷歌搜索后,我必须承认你是对的,在一些开发博客上写到这也是不可原谅的。谢谢。
    • 我注意到您对这个早先的问题提供了类似的答案。您可能还想修改该答案。 stackoverflow.com/questions/3353084/…
    【解决方案3】:

    如果您的 IN 子句中有大量项目,性能确实会变慢

    【讨论】:

      猜你喜欢
      • 2018-04-12
      • 2019-01-15
      • 1970-01-01
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多