[SQL] 조인수행원리

qwe8851·2022년 8월 14일
0

🗄️ DB

목록 보기
5/9

조인수행 방법 3가지

  • Nested Loop
    루프를 돌며 두 테이블의 로우를 연결하는 형식

  • Sort-Marge
    참조할 인덱스가 없는 두 테이블을 정렬하여 순차적으로 연결시켜주는 방식

  • Hash
    두 테이블이 너무 큰 경우, 해쉬맵에 저장하여 연결시켜 조인하는 방식


Nested Loop join(NL join)

원리

  1. 선행테이블에서 첫 번째 행을 접근
  2. 그 행의 조인할 속성을 가지고 후행테이블 인덱스를 거쳐 접근
  3. 1~2번의 작업을 반복하여 맵핑하여 결과를 버퍼에 저장하여 마지막에 출력함

특징

  • 선행테이블을 풀스캔하므로, 선행테이블의 크기가 작을수록 유리
    ✔️ 그래서, 두 테이블의 크기 차이가 있느니 경우, 유리하게 사용될 수 있는 방법임
  • 후행테이블에 대해서는 반드시 인덱스가 존재해야 NL조인이 가능
  • 절차적이며,프로그래밍에서 for, while문과 같은 구조로 수행된다. (loop를 돎)



Sort-Marge join

원리

  1. 선행테이블의 조인 조건을 만족하는 행을 찾아 정렬(풀스캔)
  2. 후행테이블의 조건을 만족하는 행을 찾아 정렬(풀스캔)
  3. 정렬된 두 결과를 비교하여 조인 수행& 성공결과를 버퍼에 저장하여 출력

특징

  • 인덱스가 없어도 가능한 조인법
  • 조인시 '='이 아닌 경우, NL보다 유리한 방법
  • 두 테이블의 사이즈가 비슷한 경우 유리
  • 사이즈가 차이가 큰 경우에는 불리하고 비효율적(NL이 유리)
  • 사전에 Sorting작업 필요



Hash join

✔️ Sort Merge로는 대용량 데이터를 처리하기에 메모리 부하가 있어 고안된 방법

원리

  1. 선행테이블에서 키를 기준으로 만족하는 행에 해쉬함수를 적용하여 해쉬테이블로 생성(조인컬럼과 select 컬럼도 저장)
  2. 후행테이블에서도 똑같이 수행
  3. 해쉬테이블이 완성되면 추출버퍼에에 넣어 결과 출력

특징

  • 메모리 사용이 큰 대용량 테이블 조인시 메모리 외의 임시영역까지사용하여 저장할 수 있어 유리
  • 동등조인 시에만 사용 가능한 방법이므로 거의 사용이 없음
    ✔️ Non Equal Join 은 불가능. Equal Join 만 가능함





# Summary

NL(Nested Loop) join

  • 선행테이블이 작을수록 유리
  • 두 테이블의 크기 차가 있는 경우 유리
  • 후행테이블반드시 인덱스가 존재해야 함
  • 절차적
  • for, while문과 같은 구조

Sort Marge join

  • 인덱스가 없어도 가능
  • 조인시 '='이 아닌 경우, NL보다 유리
  • 두 테이블의 사이즈가 비슷한 경우 유리
  • 사이즈가 차이가 큰 경우에는 불리하고 비효율적(NL이 유리)
  • 사전에 Sorting작업 필요

Hash join

  • 인덱스 필요 X
  • 작은 테이블을 memory에 올리는 선행테이블로 사용
  • 대용량 테이블 조인 시 유리
  • 동등 조인 시에만 사용 가능
  • Non Equal Join 불가능. Equal Join만 가능

+) non equal join일경우는 cross join을 한다 (cross조인은 tbl1의 컬럼수 X tbl2의 컬럼수

profile
FrontEnd Developer with React, TypeScript

0개의 댓글