小编典典

Postgresql UNION花费的时间是运行单个查询的时间的10倍

sql

我正在尝试在postgresql中两个几乎相同的表之间进行比较。我正在运行的当前查询是:

SELECT * FROM tableA EXCEPT SELECT * FROM tableB;

SELECT * FROM tableB EXCEPT SELECT * FROM tableA;

上面的每个查询大约需要2分钟才能运行(该表很大)

我想将两个查询结合起来,以期节省时间,因此我尝试了以下操作:

SELECT * FROM tableA EXCEPT SELECT * FROM tableB
UNION
SELECT * FROM tableB EXCEPT SELECT * FROM tableA;

尽管运行正常,但需要20分钟才能运行!!!我猜想最多只需要4分钟,即分别运行每个查询的时间。

UNION是否正在做一些额外的工作,从而使它花费了这么长时间?还是有什么办法可以加快速度(有或没有UNION)?

更新:使用UNION ALL运行查询需要15分钟,几乎是单独运行每个查询的4倍,我是否正确地说UNION(全部)根本不会加快运行速度?


阅读 194

收藏
2021-04-22

共1个答案

小编典典

关于您的“额外工作”问题。是的。联合不仅将这两个查询组合在一起,而且还会遍历并删除重复项。这与使用不同的语句相同。

因此,特别是与您的except语句结合使用“ union all”可能会更快。

在此处阅读更多信息:http
:
//www.postgresql.org/files/documentation/books/aw_pgsql/node80.html

2021-04-22