首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查SQL查询是否返回结果的有效方法

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

Stack Overflow用户
提问于 2009-11-10 23:31:00
回答 8查看 34.8K关注 0票数 23

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

我在考虑用这个

代码语言:javascript
运行
复制
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来提高性能?

谢谢

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-11-10 23:36:19

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

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

代码语言:javascript
运行
复制
DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
票数 10
EN

Stack Overflow用户

发布于 2009-11-10 23:34:26

你有id和date的索引吗?

也许你只是想:

代码语言:javascript
运行
复制
select top 1  1 from myTable where id=7 and rowInsertDate > '01/01/2009' 

注意:如果数据存在,则返回1,否则不返回任何内容。

另一次编辑。如果没有数据,这将不会返回值为null的行,而不会返回任何行。更像是null,因为它更具比喻意义。

票数 11
EN

Stack Overflow用户

发布于 2009-11-10 23:39:21

这是我能在我的项目中获得的最快速度:

代码语言:javascript
运行
复制
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 AnyData
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1708815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档