데이터베이스 조인

From CS Wiki
Revision as of 23:34, 28 August 2021 by 아이리움 (talk | contribs) (새 문서: == 조인 기준에 따른 종류 == === 이너 조인 === 일치하는 조인 조건이 있는 데이터만 출력 === 아우터 조인 === 한쪽에만 조인 조건이 있더라...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

조인 기준에 따른 종류

이너 조인

일치하는 조인 조건이 있는 데이터만 출력

아우터 조인

한쪽에만 조인 조건이 있더라도 데이터 출력, 데이터가 없는 릴레이션 부분은 null 처리됨

조인 방식에 따른 종류

NESTED LOOPS 조인

조인 대상 테이블의 인덱스가 있는 경우 사용

  • Loop의 기준이 되는 드라이빙/드리븐 테이블 선정
  • 드라이빙 테이블 기준으로 반복해서 읽으며 인덱스를 이용한 조인 수행

최적화 방안

  • 드라이빙 테이블 선정
  • 조인 순서 조정
  • 적절한 인덱스 설계

SORT-MERGE 조인

조인 대상 테이블에 인덱스가 없는 경우 사용

  • 각 테이블의 데이터를 동시에 읽어 들임
  • 각 테이블 데이터를 연결 칼럼을 기준으로 정렬
  • 정렬이 모두 끝난 후 조인 수행

장점

  • 인덱스 불필요
  • 조인 연산자가 '='이 아닌 경우 nested loop 조인보다 유리한 경우가 많음

단점

  • 정렬 작업으로 인한 메모리 오버헤드가 큼
  • 조인 대상 데이터 간 크기의 차이가 큰 경우, 한쪽 정렬이 먼저 완료되어 대기하므로 비효율 발생

최적화 방안

  • 데이터를 빨리 읽어들여서 정렬할 수 있도록 메모리(SORT_AREA_SIZE) 최적화

HASH 조인

NESTED LOOPS나 SORT-MERGE 사용이 불리한 경우 사용

  • 드라이빙 테이블 선정
  • 드라이빙 테이블을 우선적으로 해시 생성
  • 만들어지는 해시를 기준으로 조인 수행[1]

장점

  • 메모리 성능이 좋은 경우 최적의 성능 발휘

단점

  • 메모리의 과다한 사용, 메모리 부족시 속도가 현저히 느려짐

최적화 방안

  • 데이터를 빨리 읽어들여서 해실할 수 있도록 메모리(HASH_AREA_SIZE[2]) 최적화

같이 보기

  1. Sort-Merge와 같이 작업이 먼저 끝나는 테이블이 대기하지 않음
  2. HASH_AREA_SIZE는 기본적으로 SORT_AREA_SIZE의 2배로 설정된다.