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

Rob*_*ert 20 sql

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

我想用这个

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

这是一般的前提.

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

我的问题是让'计数'返回376986并计算需要4秒.使用IF EXISTS会在找到满足条件的1行时立即停止.

我决定使用IF EXISTS或只查询@@ ROWCOUNT并查看它是否大于零.

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

谢谢

Nat*_*ger 11

你有id和日期的索引吗?

也许你只想要:

select top 1  1 from myTable where id=7 and rowInsertDate > '01/01/2009' 
Run Code Online (Sandbox Code Playgroud)

注意:如果数据存在,则返回1,否则返回1.

另一个编辑.如果没有数据,则不会返回值为null的行,而是不返回任何行.在更具象征意义上更像是无效.


Ale*_*ini 10

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

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
Run Code Online (Sandbox Code Playgroud)


Ada*_*Dev 7

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

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

DBCC FREEPROCCACHE
DBCC DROPCLEANBUFFERS
Run Code Online (Sandbox Code Playgroud)