我试图获取 postgresql 中两个几乎相同的表之间的差异。我当前运行的查询是:
SELECT * FROM tableA EXCEPT SELECT * FROM tableB;
and
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 ALL 运行查询需要 15 分钟,几乎是单独运行每个查询的 4 倍,我是否正确地说 UNION (all) 根本不会加快速度?
关于你的“额外工作”问题。是的。 Union 不仅合并两个查询,而且还遍历并删除重复项。这与使用 unique 语句相同。
因此,特别是与您的 except 语句“union all”结合使用可能会更快。
在这里阅读更多内容:http://www.postgresql.org/files/documentation/books/aw_pgsql/node80.html http://www.postgresql.org/files/documentation/books/aw_pgsql/node80.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)