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

我试图在 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(全部)根本不会加快速度?

关于你的“额外工作”问题.是. Union不仅结合了两个查询,还通过并删除了重复项.它与使用不同的语句相同.

出于这个原因,特别是与你的except语句结合使用“union all”可能会更快.

在这里阅读更多:
http://www.postgresql.org/files/documentation/books/aw_pgsql/node80.html

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...