我想优化一个表在 SQL Server 中的查询,以了解它是否有少于一定数量的记录数。我不需要知道完整的计数,只需要知道它是否小于,比如说,2。
这样做会有效率吗?...
if (
select count(*)
from (select top (2) *
from sys.databases) t
) > 1
begin
select 1
end
else
begin
select 0
end
我想优化一个表在 SQL Server 中的查询,以了解它是否有少于一定数量的记录数。我不需要知道完整的计数,只需要知道它是否小于,比如说,2。
这样做会有效率吗?...
if (
select count(*)
from (select top (2) *
from sys.databases) t
) > 1
begin
select 1
end
else
begin
select 0
end
是的。
问题中的查询原则上能够比明显的替代方法更有效地执行此操作 doing
select count(*) from sys.databases
。出于同样的原因 as
EXISTS
通常优于COUNT
. 它可以短路。TOP
一旦接收到第二个行,聚合运算符下面的操作就可以停止请求行,而不是请求更多行并导致读取其他不相关的行。然而,它并不能绝对保证更有效率。偶尔会出现边缘情况,其中添加 a
TOP
会导致比仅返回整个结果集的查询更糟糕的总体计划。除非您需要阻止并确保您的结果精确到纳秒,否则您可以从内存中的 DMV 获取此信息,而不是扫描整个表格。