我正在尝试在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(全部)根本不会加快运行速度?
关于您的“额外工作”问题。是的。联合不仅将这两个查询组合在一起,而且还会遍历并删除重复项。这与使用不同的语句相同。
因此,特别是与您的except语句结合使用“ union all”可能会更快。
在此处阅读更多信息:http : //www.postgresql.org/files/documentation/books/aw_pgsql/node80.html