检查 SQL 查询是否会返回结果的有效方法

新手上路,请多包涵

我想编写一个简单地返回 1 或 0 的查询,具体取决于是否会有结果。

我想用这个

IF EXISTS(
      select * from myTable
      where id=7 and rowInsertDate BETWEEN '01/01/2009' AND GETDATE()
)
SELECT 1
ELSE
SELECT 0

这是一般的前提。

最终结果实际上将是一个更复杂的查询,采用一对多的参数和使用 sp_executesql 构建和执行的字符串

我的问题是假设“计数”将返回 376986 并需要 4 秒来计算。使用 IF EXISTS 将在找到满足条件的 1 行后立即停止。

我正在决定是使用 IF EXISTS 还是只查询 @@ROWCOUNT 并查看它是否大于零。

我确实尝试了一些测试,并且几乎都以相同的速度运行,但是在 2 年的时间里,当有更多的数据时,使用 IF EXISTS 是否可能会提高性能?

谢谢

原文由 Robert 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 664
2 个回答

IF EXISTS 应该更有效,因为它被优化为一旦找到第一行就停止。这就是我总是做这种检查的方式,而不是使用 COUNT()。

为了进行性能比较,只需在每次测试之前清除数据和执行计划缓存(仅限非生产数据库服务器),以确保您进行公平测试:

 DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS

原文由 AdaTheDev 发布,翻译遵循 CC BY-SA 2.5 许可协议

select isnull(
(select 1 from myTable
  where id=7 and rowInsertDate BETWEEN '01/01/2009' AND GETDATE())
,0)

原文由 Prasanth A 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Stack Overflow 翻译
子站问答
访问
宣传栏