GROUP BY 还能优化?Pivot 的新发现

Can GROUP BY still be optimized after all these years?

在分析型数据库中,GROUP BY 操作看似简单,优化到极致却异常复杂。最近,我们在 Pivot 中发现了一种针对“找出前 K 个聚合组”查询的创新优化方法。传统算法在处理高基数分组键时,会机械地合并所有分区,即使其中绝大多数对最终结果毫无贡献。通过引入基于哈希的“槽位”结构,我们能够在聚合阶段智能剪枝,跳过那些不可能影响 TopK 结果的分区。这一策略在 ClickBench 基准测试中表现亮眼,部分查询速度提升 1.6 倍,同时剪除了超过 70% 的分区计算。

数据库世界最让我着迷的一点是,一个简单的操作在优化到极致时,会变得极其复杂。
  1. malisper

    挺酷!给其他人科普一下,他们描述的数据结构是 count-min sketch。看起来他们用它来限制能进入 group-by 的元素数量,从而跳过一大堆额外工作。

  2. ozgrakkurt

    他们的 ClickBench 测试结果看起来真的很棒。

    https://benchmark.clickhouse.com/#system=+liH|Hoaus|DcD|ucqs...

  3. toddbandrowsky

    说实话,我很难理解为什么把数据集跨网络传输会比直接发送聚合后的结果更便宜。这才是真正的问题所在。我的意思是,谁会在乎在单机上执行 group-by 只需 100ns,而数据往返传输却要花费十倍的时间呢?

    最快的 group-by 操作是在该机器上顺序内存中完成的,数据直接从 nvme 读取。

    所以,当我们做 group-by 分区时,实际上是在说:把各个组放到不同的机器上,然后对 group-by 再进行分组。如果数据量大到离谱,那最合适的地方就是大型主机(mainframe),这东西本质上就是为处理这种海量数据集的 group-by 而生的。

同日更多故事

2026-11-07