← 질문 목록
#228깊이 0
조인으로 인해 성능 저하가 발생하는 원인은 무엇인가?
조인 결과의 크기는 조인 개수가 아니라 키가 얼마나 겹치느냐로 정해진다. 겹침이 많으면 중간 결과가 부풀고 정렬과 병합이 따라 는다.
| 기준 | Nested Loop Join | Hash Join | Merge Join |
|---|---|---|---|
| 처리 방식 | 이중 루프 순회 | 해시 테이블 생성 | 정렬 후 병합 |
| 적합한 데이터 | 소량 데이터 | 대량 데이터 | 정렬된 데이터 |
| 시간 복잡도 | O(N*M) | O(N+M) | O(N log N + M log M) |
Nested Loop Join은 외부 테이블의 모든 행을 하나씩 읽어 내부 테이블에서 조건에 맞는 행을 찾는다. 인덱스가 없으면 전체 테이블 스캔이 발생해 성능이 급격히 떨어진다.
Hash Join은 작은 테이블을 메모리에 해시 테이블로 올린 뒤 큰 테이블을 스캔하며 매칭되는 값을 찾는다. 메모리 부족 시 디스크 I/O가 발생해 느려진다.
Merge Join은 양쪽 테이블을 조인 키로 정렬한 뒤 순차적으로 읽으며 병합한다. 이미 정렬되어 있거나 범위 조인을 할 때 Merge Join이 유리하다.