1

如果我在 SQL Server 2008 R2 中执行以下查询,count(*)是否只会为 OUTER SELECT 查询确定一次聚合,还是会为 OUTER SELECT 中的每条记录重复一次?

我猜测 SQL Server 会很聪明地看到正在重复相同的计算,因此它只会为了优化目的进行一次计算。TotalCount对于外部查询中的所有行,下面查询中的值将是相同的。

SELECT 
    p.ProductId, p.ProductName,
    (select count(*) from Products p1) as TotalCount 
FROM Products p
4

1 回答 1

1

不,您对 SQL Server 的期望过高。另外:查询处理器真的不能确定这个值不会随着时间的推移而改变——所以它不能真正为你“优化”这个。

对于每一行,此子查询将执行一次。

因此,如果您的SELECT语句将返回 1000 万行,则此计数将确定 1000 万次。

如果您不希望这样,您始终可以select count(*)..在查询之前运行一次并将值存储到 SQL 变量中,然后在查询中选择该变量:

DECLARE @TableCount INT

SELECT @TableCount = COUNT(*) FROM Products

SELECT 
    p.ProductId, p.ProductName, @TableCount
FROM 
    Products p
于 2012-11-24T19:15:05.597 回答