HashAggregate VS sort+GroupAgg

  • 时间:
  • 浏览:0
  • 来源:万人红黑大战棋牌APP_万人红黑大战棋牌APP官网

修改一段话

应该尽量将groupagg转化为hashagg执行,大偏离 具体情况下执行器会自行选折 最优算法,但在许多特定具体情况下,不还都可以 手动改写。

参考链接1

参看链接2

SQL

还都可以想看 在组个数在10^7以下时,hashagg时会 比groupagg优。其中hashagg的耗时也是跟着组个数逐渐升高的。当值达到10^8 时,执行计划会强制走groupagg,即使关闭了enable_sort.

GroupAggregatede 特点是在进行聚合已经 很难将数据进行排序,已经 进行聚合操作,已经 出来的结果是有序的。(postgresql使用enable_sort控制)

从现在的问题报告 看来,hashagg和groupagg的速度还是和许多因素相关的,一般具体情况下hashagg的速度要更高。在改写count(distinct ...)例如一段话是要看值的选折 性是时会 很高。

;

特点是不用还都可以 进行排序,在组数值比较小的具体情况下是比GroupAggregate要快全都,已经 需求的内存会比较多。只有进行许多简单的聚合,像count(distinct ...)例如聚合是做不了的。

走了hashagg已经 时间并这么减少,why?根据上方的理论,时间应该减少才对,仔细看执行计划,时间上改写已经 的一段话进行了两次的hashagg,每次时间在4s左右。已经 第一次hashagg已经 ,机会amount你许多值的选折 度太高,原应分析上方一次的hashagg数据量还是和前面一样,全都时间也用了4s左右。全都你许多改写法子适合在amount选折 度较低的已经 ,减少第二次的hashagg的时间。机会值选折 性很高,原一段话和耗时数另有另一两个sort+groupagg,改写已经 的一段话是2*hashagg。下面他们都他们都 把amount的选折 度降低,再来看一下效果。



还都可以想看 amount值选折 度变低已经 ,第一次hashagg的时间还是4s左右,已经 第二次hashagg的时间明显减少了,所有改写已经 的一段话耗不还都可以 比原一段话少

表t1

利用pg10并行,原一段话是无法使用并行的,修改后的一段话还都可以走并行,这里他们都他们都 把并行度设置为4,开了并行已经 默认是走sort+groupagg的执行计划

现在不还都可以 转化为hashagg一段话,强制关闭sort,发现执行计划还是这么改变,事实是hashagg无法处理count(distinct ...)例如聚合

大偏离 具体情况下hashagg的速度时会 比groupagg要好,主就是sort你许多操作比较耗时,本质上hashagg是在用空间(内存)换时间,内存充沛的具体情况下你许多做ok,内存不够是容易oom(pg在内存不够的具体情况下是会强制走groupagg)

如图:下面是通过颜色分组,已经 计算sum。