2

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

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

比这样的更快:

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

4 回答 4

4

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

于 2011-01-19T14:40:03.480 回答
3

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

于 2011-01-19T14:41:17.150 回答
2

不,不会的。

SQL Server用于TOP计划评估EXISTS

于 2011-01-19T14:40:55.800 回答
2

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

于 2011-01-19T14:41:20.397 回答