본문 바로가기
SQL Server/join

[MSSQL] 물리적 조인(Nested Loop, Merge, Hash)

by 쏭냥쏭냥 2022. 12. 20.

물리적 Join 작업
1) Nested Loop join
루프를 돌며 두 테이블의 로우를 연결하는 방식
랜덤액세스 방식
선행 테이블을 풀스캔 하므로 선행테이블의 크기가 작을수록 유리
후행 테이블에 반드시 인덱스가 있어야 함
<수행 방식>
선행 테이블 첫번째 행 접근
해당 행 조인 속성을 가지고 후행 테이블 인덱스를 거쳐 접근
위 작업 반복 후 버퍼에 저장 후 마지막에 출력


2) Merge join
참조할 인덱스가 없는 테이블도 사용 가능 (인덱스가 없어도 조인 가능)
<수행 방식>
선행 테이블의 조인 조건을 만족하는 행을 찾아 정렬
후행 테이블의 조인 조건을 만족하는 행을 찾아 정렬
정렬된 두 결과를 비교하며 조인 수행 후 성공하면 버퍼에 저장 후 마지막에 출력
동등 조인 (=) 이 아닌 경우 NL 보다 유리
두 테이블의 사이즈가 비슷할수록 좋음


3) Hash join

Sort-Merge로 대용량 데이터를 처리하기에 힘들어서 나옴
메모리 사용량이 큰 대용량 테이블 조인 시 디스크까지 사용할 수 있음
결과 행수가 적은 테이블을 선행으로 쓰는 것이 유리
실제값이 크다고 Hash 값이 큰 게 아니어서 동등 조인(=)만 가능
<수행 방식>
선행 테이블에서 주어진 조건을 만족하는 행을 찾음
해당 행들에 대해서 조인키를 기준으로 Hash 함수를 적용하여 Hash 테이블을 생성
후행도 만족하는 행들을 Hash 함수를 적용하여 선행 테이블의 맞는 값들을 찾음
Join 수행 후 추출 버퍼에 넣음 -> 마지막에 출력

댓글