0

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

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

SELECT 需要很长时间才能执行,然而,在 EXISTS 周围我们很快就完成了。

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

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

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

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

4

1 回答 1

3

您的 if exists 检查匹配条件的存在并在找到匹配条件后停止,但永远不必返回结果。我相信,一旦您从集合中进行选择,它就必须返回一些东西,并且取决于集合,可能需要一段时间才能获得最高评价?

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

于 2013-03-12T12:27:48.753 回答