我想写一个简单返回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构建和执行的字符串
我的问题是,假设'count‘将返回376986,并且需要4秒来计算。使用IF EXISTS将在找到满足条件的一行时立即停止。
我正在决定是使用IF EXISTS,还是只查询@@ROWCOUNT,看看它是否大于零。
我确实尝试了一些测试,两者的运行速度几乎相同,但在两年的时间里,当有更多的数据时,它是否可能使用EXISTS来提高性能?
谢谢
发布于 2009-11-10 23:36:19
IF EXISTS应该更高效,因为它被优化为在找到第一行时立即停止。这就是我总是做这种检查的方式,而不是使用COUNT()。
为了进行性能比较,只需在每次测试之前清除数据和执行计划缓存(仅限非生产数据库服务器),以确保您的测试是公平的:
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS发布于 2009-11-10 23:34:26
你有id和date的索引吗?
也许你只是想:
select top 1 1 from myTable where id=7 and rowInsertDate > '01/01/2009' 注意:如果数据存在,则返回1,否则不返回任何内容。
另一次编辑。如果没有数据,这将不会返回值为null的行,而不会返回任何行。更像是null,因为它更具比喻意义。
发布于 2009-11-10 23:39:21
这是我能在我的项目中获得的最快速度:
SELECT CASE WHEN EXISTS (
select top 1 1
from myTable
where id=7
and rowInsertDate BETWEEN '01/01/2009' AND GETDATE()
) THEN 1 ELSE 0 END AS AnyDatahttps://stackoverflow.com/questions/1708815
复制相似问题