조인의 원리

xyzw·2024년 10월 10일
0

CS

목록 보기
18/18

중첩 루프 조인

중첩 For문과 같은 원리로 조건에 맞는 조인을 하는 방법

  • 랜덤 접근에 대한 비용이 많이 증가하므로 대용량의 테이블에서는 사용하지 않음
  • 예를 들어 "t1, t2 테이블을 조인한다" 라고 했을 때, 첫 번째 테이블에서 행을 한 번에 하나씩 읽고, 그다음 테이블에서도 행을 하나씩 읽어 조건에 맞는 레코드를 찾아 결과값을 반환함

정렬 병합 조인

각각의 테이블을 조인할 필드 기준으로 정렬하고 정렬이 끝난 이후에 조인 작업을 수행하는 조인

  • 조인할 때 적절한 인덱스가 없고 대용량의 테이블들을 조인하고 조인 조건으로 <, > 등 범위 비교 연산자가 있을 때 사용

해시 조인

해시 테이블을 기반으로 조인하는 방법

  • 두 개의 테이블을 조인한다고 했을 때 하나의 테이블이 메모리에 온전히 들어간다면 보통 중첩 루프 조인보다 더 효율적임
  • 동등(=) 조인에서만 사용할 수 있음
  • MySQL의 해시 조인 단계는 빌드 단계, 프로브 단계로 나뉨

빌드 단계

입력 테이블 중 하나를 기반으로 메모리 내 해시 테이블을 빌드하는 단계

  • 두 테이블 중 바이트가 더 작은 테이블을 기반으로 테이블을 빌드함
  • 조인에 사용되는 필드가 해시 테이블의 키로 사용됨

프로브 단계

레코드 읽기를 시작하며, 각 레코드에서 찾고자 하는 필드에 일치하는 레코드를 찾아서 결과값으로 반환

  • 각 테이블은 한 번씩만 읽게 되어 중첩해서 두 개의 테이블을 읽는 중첩 루프 조인보다 보통은 성능이 더 좋음

0개의 댓글