如果在T-SQL中存在

时间:2011-09-07 00:36:32

标签: sql-server tsql exists

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

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

return 1

else

return 0

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

2 个答案:

答案 0 :(得分:49)

是的,它会停止执行,因此通常优先于HAVING COUNT(*) > 0,而这通常不会。

如果查看执行计划,EXISTS将会看到table1的实际行数不会超过1,而与匹配记录的数量无关。

在某些情况下,SQL Server可以在简化阶段将COUNT查询的树转换为与EXISTS相同的树(使用半连接,而不会看到聚合运算符){{ 3}}

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

答案 1 :(得分:-3)

在这种情况下不需要“其他”:

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