2011-01-19 50 views
2

据我所知,SQL EXISTS检查是否存在行,但它是否评估整个表达式?因此,举例来说,会是这样的:SQL EXISTS性能

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

要超过这样的速度更快:

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

你如何执行并查看查询执行计划 – 2011-01-19 14:44:07

回答

3

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

4

的存在是因为,则表达式的值为true先打后会停止,所以顶部(1 ) - 部分是不必要的。

2

不,它不会。

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

2

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