Sql server 2008 r2 SQL Server是否在此示例查询中优化了重复聚合计算?

Sql server 2008 r2 SQL Server是否在此示例查询中优化了重复聚合计算?,sql-server-2008-r2,query-optimization,Sql Server 2008 R2,Query Optimization,如果我在SQL Server 2008 R2中执行以下查询,那么对于外部选择查询,count(*)聚合将只确定一次,还是将对外部选择中的每个记录重复 我猜想SQL Server会智能地看到相同的计算正在重复,因此它只会为优化目的进行一次计算。下面查询中的TotalCount值对于外部查询中的所有行都是相同的 SELECT p.ProductId, p.ProductName, (select count(*) from Products p1) as TotalCount F

如果我在SQL Server 2008 R2中执行以下查询,那么对于外部选择查询,
count(*)
聚合将只确定一次,还是将对外部选择中的每个记录重复

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

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

不,您对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

不,您对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

好啊你想把它写在另一个帖子里,这样我就可以把它标记为答案了。你想在另一个帖子里写,这样我就可以把它标记为答案了。