gpt4 book ai didi

sql-server - T-SQL 中的 IF EXISTS

转载 作者:行者123 更新时间:2023-12-01 18:10:11 24 4
gpt4 key购买 nike

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

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

return 1

else

return 0

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

最佳答案

是的,它会停止执行,因此这通常比 HAVING COUNT(*) > 0 更可取,后者通常不会。

使用EXISTS,如果您查看执行计划,您会发现从table1出来的实际行数不会超过1,无论匹配的数量是多少记录。

在某些情况下,SQL Server 可以在简化阶段将 COUNT 查询的树转换为与 EXISTS 相同的树(使用半连接且无聚合)运算符(operator)在视线中)an example of that is discussed in the comments here .

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

关于sql-server - T-SQL 中的 IF EXISTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7327694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com