我试图在postgresql中的两个几乎相同的表之间得到差异。我当前运行的查询是:Postgresql UNION需要运行单个查询的时间长达10倍
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 ALL运行查询需要15分钟,几乎是自己运行每个的4倍,我是否正确地说UNION(全部)不会加快速度?
单个tableA或tableB中是否有重复项需要省略?否则,请尝试“联合所有”。 – 2011-06-13 23:59:44
@ScrumMeister:我之前没有想过这个。联合会删除来自单个表的重复项吗?我认为它只删除了两个联合表之间的重复项。我可能不得不研究这一点。 – RThomas 2011-06-14 00:20:58
你可以发布'EXPLAIN ANALYZE'的输出吗? – 2011-06-14 06:00:23