Sql server 2008 r2 SQL Server是否在此示例查询中优化了重复聚合计算?
如果我在SQL Server 2008 R2中执行以下查询,那么对于外部选择查询,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
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
好啊你想把它写在另一个帖子里,这样我就可以把它标记为答案了。你想在另一个帖子里写,这样我就可以把它标记为答案了。