关于SQL / Postgres中聚合函数内部的问题

时间:2011-03-23 23:33:09

标签: sql postgresql aggregate-functions

像SUM这样的函数如何工作?如果我执行

select id,sum(a) from mytable group by id

按ID排序然后对每个相等id的范围求和吗?我不是计划专家,但看起来就是这样,mytable可能是一亿行,有几百万个不同的id。

或者它只保留id的哈希值 - > current_sum,然后在每一行增加id的值或添加一个新的键?是不是更快,更少的内存饥饿?

2 个答案:

答案 0 :(得分:1)

SQL标准试图规定外部行为,而不是内部行为。在这种特殊情况下,符合(众多标准之一)标准的SQL实现应该按照此顺序执行操作。

  1. 从FROM子句中的所有表构造函数构建工作表。 (在你的例子中只有一个。)

  2. 在GROUP BY子句中,将工作表分成组。将每个组减少到一行。用分组表替换工作表。

  3. 解析SELECT子句中的表达式。

  4. 遵循SQL标准的查询优化器可以自由地重新排列他们喜欢的东西,只要结果与遵循这些步骤的结果相同即可。

    您可以在this SO question的答案和评论中找到更多详细信息。

答案 1 :(得分:0)

所以,我发现了这个http://helmingstay.blogspot.com/2009/06/postgresql-poetry-aggregate-median-with.html,声称它确实使用了累加器模式。嗯。