像SUM这样的函数如何工作?如果我执行
select id,sum(a) from mytable group by id
按ID排序然后对每个相等id的范围求和吗?我不是计划专家,但看起来就是这样,mytable可能是一亿行,有几百万个不同的id。
或者它只保留id的哈希值 - > current_sum,然后在每一行增加id的值或添加一个新的键?是不是更快,更少的内存饥饿?
答案 0 :(得分:1)
SQL标准试图规定外部行为,而不是内部行为。在这种特殊情况下,符合(众多标准之一)标准的SQL实现应该按照此顺序执行操作。
从FROM子句中的所有表构造函数构建工作表。 (在你的例子中只有一个。)
在GROUP BY子句中,将工作表分成组。将每个组减少到一行。用分组表替换工作表。
解析SELECT子句中的表达式。
遵循SQL标准的查询优化器可以自由地重新排列他们喜欢的东西,只要结果与遵循这些步骤的结果相同即可。
您可以在this SO question的答案和评论中找到更多详细信息。
答案 1 :(得分:0)
所以,我发现了这个http://helmingstay.blogspot.com/2009/06/postgresql-poetry-aggregate-median-with.html,声称它确实使用了累加器模式。嗯。