programing

해시 조인(Oracle RDBMS)과 머지 조인(Merge Join)의 차이점은 무엇입니까?

telebox 2023. 2. 26. 09:33
반응형

해시 조인(Oracle RDBMS)과 머지 조인(Merge Join)의 차이점은 무엇입니까?

특히 Oracle RDBMS에서 해시 조인 및 병합 조인 간의 성능 이득/손실은 무엇입니까?

결합키에 따라 결합되는 2개의 데이터 세트를 정렬한 후 결합함으로써 "소트 병합" 결합이 이루어진다.결합은 매우 저렴하지만, 특히 디스크로 유출되는 경우에는 비용이 엄청나게 많이 들 수 있습니다.인덱스를 통해 정렬된 순서대로 데이터 세트 중 하나에 액세스할 수 있으면 정렬 비용을 낮출 수 있지만 인덱스 스캔을 통해 테이블의 높은 비율에 액세스하는 것은 전체 테이블 스캔에 비해 매우 비용이 많이 들 수 있습니다.

해시 조인은 조인 열에 따라 하나의 데이터 세트를 메모리에 해시하고 다른 데이터 세트를 읽어 해시 테이블을 검색하여 일치 여부를 확인하는 방식으로 수행됩니다.해시 조인(join)은 해시 테이블을 완전히 메모리에 저장할 수 있는 경우 매우 낮은 비용으로, 총 비용은 데이터 세트를 읽는 비용보다 매우 적게 듭니다.해시 테이블을 원패스 정렬로 디스크에 흘려야 하는 경우 비용이 증가하고 멀티패스 정렬의 경우 비용이 크게 증가합니다.

(10g 이전에서는 큰 테이블에서 작은 테이블로의 외부 조인은 퍼포먼스 면에서 문제가 있었습니다.옵티마이저는 해시 조인을 위해 작은 테이블에 먼저 액세스하고 외부 조인을 위해 큰 테이블에 먼저 액세스해야 하는 필요성을 해결할 수 없었기 때문입니다.따라서 이 상황에서는 해시 조인을 사용할 수 없었습니다).

해시 결합 비용은 결합 키로 두 테이블을 분할하여 줄일 수 있습니다.이를 통해 옵티마이저는 한 테이블의 파티션에서 행이 다른 테이블의 특정 파티션에서만 일치하는 것을 찾을 수 있으며, n개의 파티션이 있는 테이블의 경우 해시 조인은 n개의 독립된 해시 조인으로 실행됩니다.여기에는 다음과 같은 영향이 있습니다.

  1. 각 해시 테이블의 크기가 줄어들기 때문에 필요한 최대 메모리 양이 줄어들고 작업에 임시 디스크 공간이 필요할 필요가 없어집니다.
  2. 병렬 쿼리 조작에서는 각 해시 조인을 1쌍의 PQ 프로세스로 실행할 수 있으므로 프로세스 간 메시징 양이 대폭 감소하여 CPU 사용률이 감소하고 성능이 향상됩니다.
  3. 병렬이 아닌 쿼리 동작의 경우 메모리 요건은 n배 감소하며 첫 번째 행은 이전 쿼리에서 투영됩니다.

해시 조인은 등가 조인에만 사용할 수 있지만 병합 조인은 더 유연합니다.

일반적으로 equi-join에 대량의 데이터를 결합하는 경우에는 해시 결합을 사용하는 것이 좋습니다.

이 토픽에 대해서는, 메뉴얼에 자세하게 기재되어 있습니다.

http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/optimops.htm#i51523

12.1 문서: https://docs.oracle.com/database/121/TGSQL/tgsql_join.htm

이 질문에 답변할 때 Oracle 태그가 추가되지 않은 것을 후세에 알리기 위해 이 내용을 편집하고 싶습니다.내 답변은 MS SQL에 더 적합했다.

결합은 순서를 이용하기 때문에 가능한 한 최선의 방법입니다.그 결과 결합을 실행하기 위한 테이블은 1회 패스다운됩니다.프라이머리 키나 그 키상의 테이블의 인덱스 등 순서가 같은2개의 테이블(또는 인덱스를 커버하는 것)이 있는 경우, 그 액션을 실행하면 머지 조인이 발생합니다.

해시 조인 다음으로 좋은 방법은 1개의 테이블이 (상대적으로) 적은 수의 항목을 가지고 있을 때 이루어지므로 실제로 각 행에 대해 해시가 있는 임시 테이블을 만들고 연속적으로 검색하여 조인(join)을 작성하는 것입니다.

최악의 경우는 순서(n * m)인 네스트루프입니다.즉, 이용할 순서나 사이즈는 없습니다.조인은 단순히 테이블x의 각 행에 대해 테이블 y에서 실행할 조인을 검색합니다.

언급URL : https://stackoverflow.com/questions/1111707/what-is-the-difference-between-a-hash-join-and-a-merge-join-oracle-rdbms

반응형