MSSQL性能调优之分组聚合group by
Tags: 聚合性能调优group byMSSQLSQL Server
聚合实际上对数据做分组统计,SQL Server使用两种操作符来实现聚合,流聚合(Stream Aggregation)和哈希聚合(Hash aggration)。流聚合是非阻塞性的,具有流的特性,流聚合操作符;边处理数据,边输出聚合的结果。而哈希聚合是阻塞性的,只要处理完所有的数据,才会输出聚合的结果。
一,流聚合
流聚合要求输入的数据集在group by 即分组列上是有序的,也就是说,流聚合需要排序。分组列的位置和顺序不会影响聚合的结果,因此分组列的排序是任意的。对于索引上的流聚合,由于数据是已经排序的,使用流聚合算法没有排序操作的开销。
流聚合算法是:第一个被读取的数据会创建第一个分组,后续读入的数据都会先和当前的分组匹配,如果匹配,把该行放入到当前的分组中;如果不匹配,创建新的分组,直到所有数据行都处理完成为止,最终对各个分组计算聚合值。