私はpostgresqlのほぼ同じ2つのテーブルの差分を取得しようとしています。私が実行している現在のクエリは次のとおりです。PostgreSQL UNIONは個々のクエリを実行するのに10倍の時間がかかります
SELECT * FROM tableA EXCEPT SELECT * FROM tableB;
と
SELECT * FROM tableB EXCEPT SELECT * FROM tableA;
上記のクエリはそれぞれ、(その大きなテーブル)を実行するのに約2分かかり
私は2つを組み合わせてみたかったですクエリは時間を節約することを期待しているので、私は試しました:
SELECT * FROM tableA EXCEPT SELECT * FROM tableB
UNION
SELECT * FROM tableB EXCEPT SELECT * FROM tableA;
そして、それが動作している間、実行するには20分かかります!私はそれが最大で4分、それぞれのクエリを個別に実行する時間がかかると思うだろう。
UNIONが行っている余分な作業は、それが長くかかるようになっていますか?または、これを(UNIONの有無に関わらず)スピードアップできる方法はありますか?
UPDATE:UNION ALLでクエリを実行すると、それぞれのクエリを実行するのに要する時間の約4倍の15分かかります.Union(すべて)がこれをまったくスピードアップしないと言うのは正しいですか?
'tableA'または' tableB'だけに省略が必要な重複がありますか?それ以外の場合は 'UNION ALL'を試してください。 –
@ScrumMeister:私は以前これを考えていませんでした。 unionは、単一のテーブルからの重複を削除しますか?私はそれが2つのユニオンテーブル間の重複を削除しただけだと思った。私はそれを研究しなければならないかもしれない。 – RThomas
'EXPLAIN ANALYZE'の出力を投稿できますか? –