[DB] Join 연산

Woong·2021년 12월 1일
0

DB

목록 보기
4/16

Nested loop

  • 하나의 테이블을 기준으로 다른 테이블을 순차적으로 row 를 결합하여 join
  • index가 없어도 사용 가능
  • 좁은 범위에서 유리한 성능을 보임
  • Random Access 위주이므로 결과 집합이 많을수록 느려짐
  • Row 수가 적은 테이블을 Driven 테이블로 설정
  • 실행시간이 |A|·|B| 로 매우 느림

Sort-Merge

  • 양 테이블을 정렬 후 비교하며 join
  • Random Access 대신 scan 수행
  • 조인 연산자가 = 가 아닌 경우 Nested loop 보다 유리한 경우가 많음
  • 두 결과 집합 크기의 차이가 큰 경우 비효율적
  • Sort 되기 때문에 매우 빠르지는 않지만 여러 테이블을 join 시 사용되는 실행 계획
  • join query 에 order by 가 있는 경우 사용됨
  • Sorting 메모리에 위치하는 대상은 join key뿐만 아니라 Select list도 포함되므로 불필요한 select 항목 제거
  • 실행시간이 |A|log|A| + |B|log|B| + |A| + |B| 로 느린 편

Index Join

  • index 를 사용하여 join 하는 방식
  • 실행시간이 |A| or |B| 로 빠름

Hash Join

  • 해싱 함수를 이용해 join 될 대상들을 특정 partition에 모이도록 함
  • row size 가 충분히 작아야한다 (메모리에 올라갈 만큼)
  • 이미 정렬된 relation이나 인덱스를 사용하기 어려운 경우 사용
  • join 연산자가 '=' 일 때에만 사용 가능
  • 실행시간이 |A| + |B| 로 빠름

0개의 댓글