关于Stream Aggregation与Hash Aggregate使用场景的一些疑问

【 TiDB 使用环境】
TiDB集群 v5.1.2

【问题】
根据这篇文档里(https://pingcap.com/zh/blog/tidb-source-code-reading-22)对Stream AggregationHash Aggregate的介绍

在agg阶段,确实Stream Aggregation会十分节约内存,可以从600MB减少至kb级。
但是在hash agg时,是不需要进行排序的,而Stream Aggregation需要排序,根据测试,这就导致了原本600MB的内存消耗转嫁到sort算子上,总的内存消耗未发生变动,但是执行耗时从11秒降低至31秒

所以我该如何正确使用Stream Aggregation以达到更好的内存控制呢,sort阶段是否也有节约内存的排序方式(从hint语法里并未找到 https://docs.pingcap.com/zh/tidb/stable/optimizer-hints)?

1 个赞

https://docs.pingcap.com/zh/tidb/stable/explain-aggregation#stream-aggregation

参考这个的话,如果group by 列有索引,Stream Aggregation 就更适合。

1 个赞

stream /hash 2种方式的SQL、explian analyze执行计划能贴下吗? 试试能否把agg下推到tikv
可以用HINT/*+ AGG_TO_COP() */
也有2个变量 tidb_opt_agg_push_down tidb_opt_distinct_agg_push_down

1 个赞

貌似一般读书不推荐SQL里面带提示吧

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。