过去我们有一个存储函数,它基本上看起来像这样:
IF EXISTS ( SELECT * FROM ... ) RETURN 1
SELECT 需要很长时间才能执行,然而,在 EXISTS 周围我们很快就完成了。
但是,我们现在需要在应用程序中提供一个“证书”,“给我一个示例,为什么您返回 1”。我们将查询更改为:
DECLARE @cert BIGINT
SELECT TOP 1 @cert = id FROM ...
RETURN @cert
但是,现在这需要更长的时间。我们的查询中没有ORDER BY
子句。
SQL Server 是否仍在检索所有行,然后只选择第一行?我们监督了什么?我们不应该有同样的速度吗?为什么第二个查询比第一个查询花费更多时间?(时间的大小)