SQL Server是否优化此示例查询中的重复聚合计算?

时间:2012-11-24 19:03:20

标签: sql-server-2008-r2 query-optimization

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

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

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

1 个答案:

答案 0 :(得分: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