如果在T-SQL中存在

Sid*_*idd 46 t-sql sql-server exists

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

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

return 1

else

return 0
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ith 49

是的,它会停止执行,因此HAVING COUNT(*) > 0通常不会这样做.

有了EXISTS,如果你看一下执行计划,你会看到出来的行的实际数量table1将不超过1不管匹配的记录数.

在某些情况下,SQL Server可以将COUNT查询的树转换为EXISTS与简化阶段期间的树相同(使用半连接且看不到聚合运算符),此处的注释中将讨论此示例.

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