函数像SUM一样工作吗?如果我执行有关SQL函数内部函数的问题/ Postgres
select id,sum(a) from mytable group by id
它按id排序,然后求和每个相同的id范围?我不是策划专家,但它看起来就是这样发生的,其中mytable可能有一亿行,有几百万个不同的id。
或者它只是保持id - > current_sum的散列,然后在每一行增加id的值或添加一个新的密钥?是不是更快,更少的记忆饥饿?
函数像SUM一样工作吗?如果我执行有关SQL函数内部函数的问题/ Postgres
select id,sum(a) from mytable group by id
它按id排序,然后求和每个相同的id范围?我不是策划专家,但它看起来就是这样发生的,其中mytable可能有一亿行,有几百万个不同的id。
或者它只是保持id - > current_sum的散列,然后在每一行增加id的值或添加一个新的密钥?是不是更快,更少的记忆饥饿?
所以,我发现这个,http://helmingstay.blogspot.com/2009/06/postgresql-poetry-aggregate-median-with.html,它声称它确实使用累加器模式。嗯。
SQL标准试图规定外部行为,而不是内部行为。在这种特殊情况下,符合(许多)标准之一的SQL实现应该按照这种顺序执行。
从FROM子句中的所有表构造函数构建一个工作表。 (在你的例子中只有一个)
在GROUP BY子句中,将工作表分成组。将每个组缩减为一行。用分组表格替换工作表格。
解析SELECT子句中的表达式。
遵循SQL标准的查询优化器可以自由地重新排列他们喜欢的东西,只要结果与遵循这些步骤的结果相同即可。
您可以在this SO question的答案和评论中找到更多详细信息。
考虑'更快'意味着更快获取最后一行或结果集的第一行(或其他)是很好的做法。 – 2011-03-24 11:17:56