像 SUM 这样的函数是如何工作的?如果我执行
select id,sum(a) from mytable group by id
它是否按 id 排序,然后对每个范围内的相等 id 求和?我不是规划师专家,但看起来这就是正在发生的事情,我的表可能有一亿行和几百万个不同的 ID。
或者它只是保留 id -> current_sum 的散列,然后在每一行增加 id 的值或添加一个新键?这不是更快并且更少占用内存吗?
最佳答案
SQL 标准试图规定外部行为,而不是内部行为。在这种特殊情况下,符合(众多)标准之一的 SQL 实现应该表现得像按此顺序执行操作一样。
从 FROM 子句中的所有表构造函数构建一个工作表。 (您的示例中只有一个。)
在 GROUP BY 子句中,将工作表分成组。将每组减少为一行。用分组表替换工作表。
解析 SELECT 子句中的表达式。
遵循 SQL 标准的查询优化器可以自由地按照他们喜欢的方式重新排列事物,只要结果与遵循这些步骤的结果相同即可。
您可以在 this SO question 的答案和评论中找到更多详细信息.
关于sql - 关于 SQL/Postgres 中聚合函数内部的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5412982/