我想知道如果您在查询中喜欢聚合,如果再次使用它们,SQL Server 是否知道“缓存”。
例如,
Select Sum(Field),
Sum(Field) / 12
From Table
SQL Server 会知道它已经在第一个字段上计算了 Sum 函数,然后将它除以 12 作为第二个字段吗?或者它会再次运行 Sum 函数然后将其除以 12?
谢谢
最佳答案
它计算一次
Select
Sum(Price),
Sum(Price) / 12
From
MyTable
该计划给出:
|--Compute Scalar(DEFINE:([Expr1004]=[Expr1003]/(12.)))
|--Compute Scalar(DEFINE:([Expr1003]=CASE WHEN [Expr1010]=(0) THEN NULL ELSE [Expr1011] END))
|--Stream Aggregate(DEFINE:([Expr1010]=Count(*), [Expr1011]=SUM([myDB].[dbo].[MyTable].[Price])))
|--Index Scan(OBJECT:([myDB].[dbo].[MyTable].[IX_SomeThing]))
该表有 135 万行
关于SQL Server 聚合性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6507883/