데이터베이스 조인

IT위키
아이리움 (토론 | 기여)님의 2021년 8월 29일 (일) 13:34 판 (새 문서: == 조인 기준에 따른 종류 == === 이너 조인 === 일치하는 조인 조건이 있는 데이터만 출력 === 아우터 조인 === 한쪽에만 조인 조건이 있더라...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

조인 기준에 따른 종류[편집 | 원본 편집]

이너 조인[편집 | 원본 편집]

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

아우터 조인[편집 | 원본 편집]

한쪽에만 조인 조건이 있더라도 데이터 출력, 데이터가 없는 릴레이션 부분은 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배로 설정된다.