GROUP BY 提示

使用 GROUP BY 子句时,SQL Server 查询优化器(QO)可以选择不同类型的分组运算符:

  • HASH Aggregate 为分组条目创建哈希映射
  • Stream Aggregate 适用于预先订购的输入

如果你知道什么是最优的,你可以明确要求 QO 选择一个或另一个聚合运算符。使用 OPTION(ORDER GROUP),如果输入未排序,QO 将始终选择 Stream 聚合并在 Stream 聚合前添加 Sort 运算符:

select OrderID, AVG(Quantity)
from Sales.OrderLines
group by OrderID
OPTION (ORDER GROUP) 

使用 OPTION(HASH GROUP),QO 将始终选择 Hash 聚合:

select OrderID, AVG(Quantity)
from Sales.OrderLines
group by OrderID
OPTION (HASH GROUP)