조인의 원리를 기반으로 조인 작업이 이뤄진다.
조인의 원리인 중첩 루프 조인, 정렬 병합 조인, 해시 조인에 대해 알아보겠다.

중첩 루프 조인

  • 중첩 루프 조인은 중첩 for 문과 같은 원리로 조건에 맞는 것을 조인하는 방법을 말하며, 디스크 접근에 대한 비용이 많이 증가하므로 대용량의 테이블에서는 사용하지 않아야 한다.
  • 예를 들어 t1, t2 테이블을 중첩 루프 조인을 통해 조인할 때 t1 테이블에서 먼저 한 행만 읽고 t2 테이블에서 행을 하나씩 읽어 조건에 맞는 레코드를 찾아 조인하는 것을 말한다.
  • 디스크 접근 비용을 줄여 성능을 높인 방법으로는 블록 중첩 루프 조인이 있다.
    • 테이블을 작은 블록으로 나눠서 메모리에 올린 후 이 블록을 재사용하면서 조인을 진행시켜 디스크 접근을 줄이는 방법이다.

정렬 병합 조인

  • 정렬 병합 정렬이란 각각의 테이블을 조인할 필드 기준으로 정렬하고 정렬이 끝난 이후에 벙합하여 조인하는 방법이다.
  • 병합시에는 정렬된 리스트들을 한 번씩만 순회하면서 비교하다 조인을 해준다.
  • 즉, 최선의 경우 O(N + M) 시간 복잡도가 걸린다. 최악의 경우는 O(N*M)이 될 수 있다.
  • 조인할 때 쓸 적절한 인덱스가 없고 대용량의 테이블들을 조인하고 조인 조건으로 <, > 등 범위 비교 연산자가 있을 때 사용된다.

해시 조인

  • 해시조인은 해시 테이블을 기반으로 조인하는 방법이다.
  • 하나의 테이블이 메모리에 온전히 들어간다면 보통 중첩 루프 조인보다 더 효율적이다(메모리에 올릴 수 없을 정도로 크다면 디스크를 사용하는 비용이 발생된다).
  • MySQL의 해시 조인 단계는 빌드 단계, 프로브 단계로 나뉜다.
    • 빌드 단계
      • 입력 테이블 중 크기가 더 작은 테이블을 기반으로 메모리 내 해시 테이블을 빌드하는 단계
      • 조인에 사용되는 필드가 해시 테이블의 키로 사용된다.
    • 프로브 단계
      • 조인에 사용되는 필드 값을 통해 해시 테이블에 접근한다.
      • 해시 버킷에 조건에 부합하는 레코드가 있으면 조인을 진행한다.

 

'CS > 데이터베이스' 카테고리의 다른 글

인덱스  (0) 2025.02.27
데이터베이스의 종류  (0) 2025.02.26
트랜잭션과 무결성  (0) 2025.02.26
ERD와 정규화 과정  (0) 2025.02.19
데이터베이스의 기본  (0) 2025.02.18

+ Recent posts