PostgreSQL加法/减法和聚合函数的顺序

时间:2014-08-04 21:17:03

标签: sql postgresql

在PostgreSQL中执行此查询的每个步骤的顺序是什么?

SELECT SUM(field1)+ SUM(field2)+ SUM(field3)-SUM(field4);

我认为加法/减法以正常的操作顺序发生 - 按照直接的左右顺序。我们知道不同的SUM出现的顺序是什么吗?

这是一个长查询的子集(执行大约40秒),我认为在执行查询时,字段中的数据可能会实时更改。

2 个答案:

答案 0 :(得分:2)

  

我认为在执行查询时,字段中的数据可能会实时更改

由于事务隔离,PostgreSQL将确保数据完整性。

因此,无论查询运行多长时间,所有SUM都将被评估为好像它们在同一时刻运行。

参考文献:

答案 1 :(得分:1)

zerkms的回答削减了你真正需要知道的要点,并且是正确的。在这种简单的情况下,事务隔离将确保您不会受到并发问题的影响(但请注意,它不是所有并发的神奇解决方案)。

按字面意思回答你的问题:他们实际上是交错的。

如果你写:

SELECT SUM(field1)+SUM(field2)+SUM(field3)-SUM(field4) FROM mytable;

然后Pg读取mytable一次。它会读取每一行并将mytable.field1提供给第一个总和,mytable.field2到第二个总和等等。然后它会为每一行重复。

因此所有聚合都是并行完成的(尽管不使用多个CPU)。