2011-03-23 56 views
2

函数像SUM一样工作吗?如果我执行有关SQL函数内部函数的问题/ Postgres

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

它按id排序,然后求和每个相同的id范围?我不是策划专家,但它看起来就是这样发生的,其中mytable可能有一亿行,有几百万个不同的id。

或者它只是保持id - > current_sum的散列,然后在每一行增加id的值或添加一个新的密钥?是不是更快,更少的记忆饥饿?

+0

考虑'更快'意味着更快获取最后一行或结果集的第一行(或其他)是很好的做法。 – 2011-03-24 11:17:56

回答

1

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

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

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

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

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

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