据我所知,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
据我所知,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
两者应该完全一样。 SQL Server考虑到EXISTS
是短路操作并且不评估返回结果,只是检查是否有IS返回结果!
的存在是因为,则表达式的值为true先打后会停止,所以顶部(1 ) - 部分是不必要的。
不,它不会。
SQL Server
在计划中使用TOP
评估EXISTS
。
该语句生成相同的查询计划,因此没有区别。第二个例子在我看来更容易阅读。
你如何执行并查看查询执行计划 – 2011-01-19 14:44:07