如果在T-SQL中存在

问题描述 投票:44回答:2

如果我们在SELECT中有一个IF EXISTS语句,那么一旦在表中找到记录就会停止执行吗?例如:

IF EXISTS(SELECT *  FROM  table1  WHERE Name='John' )

return 1

else

return 0

如果表中存在名为= John的行,它是否会停止执行并返回1或者是否遍历整个表以查找更多匹配项?

sql-server tsql exists
2个回答
49
投票

是的它会停止执行所以这通常比HAVING COUNT(*) > 0更好,而这通常不会。

使用EXISTS,如果查看执行计划,您将看到table1的实际行数不会超过1,无论匹配记录的数量如何。

在某些情况下,SQL Server可以在简化阶段将COUNT查询的树转换为与EXISTS相同的树(具有半连接且看不到聚合运算符)an example of that is discussed in the comments here

对于比问题中显示的更复杂的子树,您可能偶尔会发现COUNTEXISTS表现更好。因为半连接只需要从子树中检索一行,所以这可以鼓励对树的那一部分使用嵌套循环的计划 - 这在实践中可能无法达到最佳效果。


-4
投票

在这种情况下,不需要“else”:

IF EXISTS(SELECT *  FROM  table1  WHERE Name='John' ) return 1
return 0
© www.soinside.com 2019 - 2024. All rights reserved.