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.因为半连接只需要从子树中检索一行,所以这可以鼓励对树的那一部分使用嵌套循环的计划 - 这在实践中可能无法达到最佳效果.
| 归档时间: |
|
| 查看次数: |
158144 次 |
| 最近记录: |