我想编写一个简单地返回 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 许可协议
IF EXISTS 应该更有效,因为它被优化为一旦找到第一行就停止。这就是我总是做这种检查的方式,而不是使用 COUNT()。
为了进行性能比较,只需在每次测试之前清除数据和执行计划缓存(仅限非生产数据库服务器),以确保您进行公平测试: