본문 바로가기
IT/MSSQL

[MSSQL] 머지 조인(SORT MERGE JOIN) 장/단점 설명

by 베베야 2023. 1. 28.
728x90

MSSQL에서 지원하는 조인 방식은 아래와 같이 3가지가 존재한다.

1.중첩루프조인(NESTED LOOP JOIN)

2.머지조인(SORT MERGE JOIN)

3.해시조인(HASH JOIN)

 

이번 시간에는 그 중에서 "머지 조인(SORT MERGE JOIN)"에 대해서 간단히 알아보도록 하자.


2.머지조인(SORT MERGE JOIN)

중첩루프조인은 내부테이블의 조인조건에 대한 인덱스 존재 유무가 매우 중요하다.

만약 인덱스가 존재하지 않으면 조인 수마다 내부테이블을 풀스캔하기 때문이다.

이럴경우 옵티마이저는 머지조인 or 해시조인을 고려한다

 

머지조인 양쪽테이블을 조인 컬럼을 기준으로 정렬 -> 조인을 진행한다(전체 테이블을 한번만)

정렬 작업은 메모리를 사용하게되고 만약 메모리가 부족하다면 느린 디스크까지 사용하게된다

 

따라서 대용량 테이블로 갈수록 정렬 작업은 부담이 되기 때문에  조인컬럼에 인덱스를 생성하여 정렬작업을 패스하고 바로 조인을 진행하게 하면 좋은 성능을 있다.

클러스터인덱스가 아닌 넌클러스터 인덱스를 사용할 경우 Lookup비용(커버드 인덱스 사용으로 제거가능)을 고려해야한다

 

인덱스 선정기준

1.조인 컬럼에 인덱스 생성

큰 테이블을 정렬하는 작업의 부하가 큰 경우 적합
대용량 테이블의 정렬 작업은 메모리가 많이 할당되기 때문에 메모리가 부족하여 디스크를 추가로 사용할 경우 성능저하가 발생하니 주의

2.엑세스 컬럼에 인덱스 생성

각 테이블이 스스로 테이블에 있는 인덱스를 사용해서 조인에 참여할 데이터의 크기를 줄여줄 수 있어서 정렬을 하는 부하가 작을 경우 적합
비록 정렬을 하는 작업이 필요하지만 메모리에서 충분히 정렬 할 수 있다면 성능 저하 없이 조인가능


주의사항

- 두 집합을 각각 정렬한 후에 조인함으로 각 집합의 크기, 즉 테이블별 검색 조건(where)에 의해 전체 비용이 좌우된다
- 최소한 한 개의 = 조건이 있어야 한다(단 FULL OUTER JOIN의 경우 = 조건 없이 머지조인 가능)

반응형
그리드형

댓글