加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 16:19:09 所属栏目:百科 来源:网络整理
导读:我试图在 postgresql中获得两个几乎相同的表之间的差异.我正在运行的当前查询是: SELECT * FROM tableA EXCEPT SELECT * FROM tableB; 和 SELECT * FROM tableB EXCEPT SELECT * FROM tableA; 上述每个查询大约需要2分钟才能运行(它是一个大表) 我希望将这
我试图在 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读