postgresql에서 두 개의 거의 동일한 테이블간에 diff를 얻으려고합니다. 내가 실행하고 현재 쿼리는 다음과 같습니다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의 유무에 관계없이)?
업데이트 : UNION ALL을 사용하여 쿼리를 실행하면 각 쿼리를 실행하는 데 거의 4 분의 1이 걸리므로 UNION (모두)이 속도를 향상시키지 못한다고 올바르게 수정합니까?
생략해야하는'tableA' 또는'tableB'에만 중복이 있습니까? 그렇지 않으면'UNION ALL'을 시도하십시오. –
@ScrumMeister : 나는 이걸 전에 생각하지 못했습니다. union은 단일 테이블에서 중복 된 것을 제거합니까? 나는 그것이 두 개의 결합 표 사이의 중복 만 제거한다고 생각했습니다. 나는 그것을 연구해야 할 수도 있습니다. – RThomas
'EXPLAIN ANALYZE'의 출력을 게시 할 수 있습니까? –