← 질문 목록
#371깊이 0
SQL에서 세미 조인은 어떤 문제를 해결하는가?
데이터베이스
1:N 관계 조인에서 발생하는 메인 테이블의 중복 출력과 불필요한 연산 문제를 해결한다. 서브쿼리에 조건이 일치하는 행이 존재하는지만 확인할 때 쓰인다.
| 관점 | 일반 조인 | 세미 조인 |
|---|---|---|
| 중복 발생 | N개만큼 메인 행 중복 | 메인 행 중복 없음 |
| 탐색 방식 | 일치하는 모든 행을 찾음 | 일치하는 첫 행에서 중단 |
| 연산 비용 | DISTINCT 정렬 필요 | 중복 제거 연산 없음 |
옵티마이저는 IN이나 EXISTS 서브쿼리를 만났각 때 세미 조인으로 변환한다. 조건에 맞는 행을 서브쿼리에서 하나라도 찾으면 즉시 검색을 멈춘다. 이를 숏서킷 평가라 부른다.
서브쿼리를 일반 조인으로 바꾸면 중복을 없애려고 DISTINCT를 써야 한다. DISTINCT는 정렬과 임시 테이블을 요구하므로 부하가 크다. 세미 조인을 쓰면 이런 정렬 과정 없이 메모리를 아낀다.
서브쿼리 쪽 테이블의 크기나 인덱스에 따라 해시 세미 조인을 고른다. 대용량 데이터 처리 시 성능 향상 폭이 커진다.