当前位置: 首页 > 面试题库 >

将IF EXIST(SELECT 1 FROM)更改为IF EXIST(SELECT TOP 1 FROM)有副作用吗?

孟晋
2023-03-14
问题内容

我的生产服务器上正在运行一个现有的SP。我发现通过 更改 IF EXIST(SELECT 1 FROM )IF EXIST(SELECT TOP 1 1 FROM )IF NOT EXIST(SELECT 1 FROM )可以显着提高性能IF NOT EXIST(SELECT TOP 1 1 FROM )。唯一的区别是 TOP 1关键字。只是想知道更改此方法是否有副作用?


问题答案:

不,应该没有区别。EXISTS找到单个匹配的行后立即退出。这就是为什么它总是优于例如(select COUNT(*) from ...) > 0-一个COUNT将迫使被视为所有行。

如果创建以下四个查询:

select * from sys.objects
select top 1 * from sys.objects
select 1 where exists(select * from sys.objects)
select 1 where exists(select top 1 * from sys.objects)

并打开执行计划,您将看到第二个查询生成了一个包含TOP操作符的执行计划。第三和第四查询产生 相同的 计划。将TOP被忽略。



 类似资料: