前言
之前系列中在查詢計劃中一直出現(xiàn)Stream Aggregate,當時也只是做了基本了解,對于查詢計劃中出現(xiàn)的操作,我們都需要去詳細研究下,只有這樣才能對查詢計劃執(zhí)行的每一步操作都了如指掌,所以才有了本文的出現(xiàn),簡短的內(nèi)容,深入的理解,Always to review the basics。
Stream Aggregate
Stream Aggregate通過單列或者多列來對行進行分組并且對指定的查詢來計算聚合表達式。最常見的聚合類型如SUM、COUNT、SUM、AVG、MIN、MAX,當我們執(zhí)行這些聚合函數(shù)時在查詢計劃中就會出現(xiàn)Stream Aggregate,Stream Aggregate是非??斓?,因為它需要在輸入時通過在GROUP BY中指定的列進行排序。如果聚合中的數(shù)據(jù)沒有進行排序此時會通過Sort進行預排序或者使用索引查找或者索引掃描來提前預排序數(shù)據(jù)。之前我們討論過出現(xiàn)Stream Aggregate有三種方式分別為:聚合函數(shù)聚合,分組聚合,DISTINCT聚合,實際上只有兩種,DISTINCT內(nèi)部就用到了分組,這里我們將Stream Aggregate分為兩種類型,一種是標量聚合,另外一種則是分組聚合。我們舉一個標量聚合的例子,也就是返回單值聚合。
標值聚合
USE TSQL2012 GO SELECT COUNT(*) FROM Sales.Orders
下面我們再來分組聚合的例子
USE TSQL2012 GO SELECT custid FROM Sales.Orders GROUP BY custid