11 sql sql-server math performance aggregate
我想知道如果你想在查询中使用聚合,SQL Server是否知道'缓存',如果再次使用它们.
例如,
Select Sum(Field),
Sum(Field) / 12
From Table
Run Code Online (Sandbox Code Playgroud)
SQL Server是否知道它已经在第一个字段上计算了Sum函数,然后将它除以第二个字段的12?或者它会再次运行Sum函数然后除以12?
谢谢
它计算一次
Select
Sum(Price),
Sum(Price) / 12
From
MyTable
Run Code Online (Sandbox Code Playgroud)
该计划给出:
|--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]))
Run Code Online (Sandbox Code Playgroud)
该表有135万行