微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/postgresql/192185.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐