【问题标题】:SQL EXISTS performanceSQL EXISTS 性能
【发布时间】:2011-06-11 19:25:23
【问题描述】:

我知道 SQL EXISTS 检查是否存在行,但是它会评估整个表达式吗?因此,例如,会是这样的:

IF EXISTS (SELECT TOP 1 1 FROM table WITH (NOLOCK))
BEGIN
    ... 
END

比这样更快:

IF EXISTS (SELECT 1 FROM table WITH (NOLOCK))
BEGIN
    ...
END

【问题讨论】:

  • 你执行怎么样,看看查询执行计划
  • 是的,我刚刚做了,它们完全一样。

标签: sql sql-server exists query-performance


【解决方案1】:

这些语句生成相同的查询计划,因此没有区别。在我看来,第二个例子更容易阅读。

【讨论】:

    【解决方案2】:

    两者的运行应该完全相同。 SQL Server 考虑到EXISTS 是一个短路操作并且不评估返回结果,只是检查是否有IS返回结果!

    【讨论】:

      【解决方案3】:

      不,不会的。

      SQL Server 在计划中使用TOP 来评估EXISTS

      【讨论】:

        【解决方案4】:

        Exists 将在第一次命中后停止,因为表达式的计算结果为 true,因此顶部 (1) 部分是不必要的。

        【讨论】:

          猜你喜欢
          • 2011-01-05
          • 2010-10-07
          • 1970-01-01
          • 2012-11-21
          • 2021-04-21
          • 1970-01-01
          • 1970-01-01
          • 2023-03-18
          • 2020-09-27
          相关资源
          最近更新 更多