데이터베이스 조인
From CS Wiki
조인 기준에 따른 종류
이너 조인
일치하는 조인 조건이 있는 데이터만 출력
아우터 조인
한쪽에만 조인 조건이 있더라도 데이터 출력, 데이터가 없는 릴레이션 부분은 null 처리됨
조인 방식에 따른 종류
NESTED LOOPS 조인
조인 대상 테이블의 인덱스가 있는 경우 사용
- Loop의 기준이 되는 드라이빙/드리븐 테이블 선정
- 드라이빙 테이블 기준으로 반복해서 읽으며 인덱스를 이용한 조인 수행
최적화 방안
- 드라이빙 테이블 선정
- 조인 순서 조정
- 적절한 인덱스 설계
SORT-MERGE 조인
조인 대상 테이블에 인덱스가 없는 경우 사용
- 각 테이블의 데이터를 동시에 읽어 들임
- 각 테이블 데이터를 연결 칼럼을 기준으로 정렬
- 정렬이 모두 끝난 후 조인 수행
장점
- 인덱스 불필요
- 조인 연산자가 '='이 아닌 경우 nested loop 조인보다 유리한 경우가 많음
단점
- 정렬 작업으로 인한 메모리 오버헤드가 큼
- 조인 대상 데이터 간 크기의 차이가 큰 경우, 한쪽 정렬이 먼저 완료되어 대기하므로 비효율 발생
최적화 방안
- 데이터를 빨리 읽어들여서 정렬할 수 있도록 메모리(SORT_AREA_SIZE) 최적화
HASH 조인
NESTED LOOPS나 SORT-MERGE 사용이 불리한 경우 사용
- 드라이빙 테이블 선정
- 드라이빙 테이블을 우선적으로 해시 생성
- 만들어지는 해시를 기준으로 조인 수행[1]
장점
- 메모리 성능이 좋은 경우 최적의 성능 발휘
단점
- 메모리의 과다한 사용, 메모리 부족시 속도가 현저히 느려짐
최적화 방안
- 데이터를 빨리 읽어들여서 해실할 수 있도록 메모리(HASH_AREA_SIZE[2]) 최적화