我試圖在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