SQL Server 2008 R2 - EXISTS vs TOP 1

时间:2013-03-12 12:21:00

标签: sql sql-server sql-server-2008

过去我们有一个存储函数,看起来基本上是这样的:

IF EXISTS ( SELECT * FROM ... ) RETURN 1

SELECT会花费相当长的时间来执行,但是,随着EXISTS的推移,我们很快就完成了。

但是我们现在需要在应用程序中使用“证书”,“给我一个例子,为什么你返回1”。我们将查询更改为:

DECLARE @cert BIGINT
SELECT TOP 1 @cert = id FROM ...
RETURN @cert

然而,现在需要更长的时间。我们的查询中没有ORDER BY子句。

SQL Server是否仍在检索所有行,之后只选择第一行? 我们监督过什么吗?我们不应该有同样的速度吗? 为什么第二个查询比第一个查询花费的时间多得多? (大小的时间)

1 个答案:

答案 0 :(得分:3)

您的if exists检查是否存在匹配条件,并在找到匹配条件后停止,但永远不必返回结果。我相信,一旦你从集合中选择,它必须返回一些东西,根据设置,最高评估可能需要一段时间吗?

如果需要很长时间,我会调查执行计划,看看是否有任何索引可以添加。