我试图在
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不仅结合了两个查询,还通过并删除了重复项.它与使用不同的语句相同.
原文链接:https://www.f2er.com/postgresql/192185.html出于这个原因,特别是与你的except语句结合使用“union all”可能会更快.
在这里阅读更多:
http://www.postgresql.org/files/documentation/books/aw_pgsql/node80.html