데이터의 양이 적을 경우, Nested-Loop 조인으로 처리되고, 데이터양이 클 경우 Sort-Merge-Join 또는 Hash-Join이 적용되는 것이 유리한 것으로 알고 있습니다. 한가지 궁금한 사항이 있는데, Postgres에서 데이터양의 많을 경우 조인에서, Hash Join보다 Sort-Merge-Join을 사용하는 경우는 어떤 것이 있나요? 그 이유를 알 수 있을까요?
감사합니다.
일반적으로 머지 조인을 하려면 정렬을 해야합니다.
즉, PostgreSQL 실행 계획 가운데 merge 를 한다고 나오면 sort merge join으로 이해하면 됩니다.
왼쪽 자료가 별로 없고, 오른쪽은 자료가 많고, 왼쪽에서 뽑은 자료로 검색이 가능한 경우 nested loop로 풀릴 가능성이 크고요,
둘다 메모리 안에서 처리가 가능하면, hash join으로 풀리고요,
merge join은 대부분 출력 결과가 많은데, 검색 조건이 딱 = 이 아닌, >,< 같은 범위가 있는 경우에 주로 그렇게 풀립니다.