Boaz/Computer Science

[CS 전공지식 #16] 챕터4-6~7. 조인과 조인의 원리

남디윤 2025. 2. 24. 19:54

 

목차

4.6 조인의 종류

4.7 조인의 원리

4.7.1 중첩 루프 조인 NLJ, Nested Loop Join

4.7.2 정렬 병합 조인

4.7.3 해시 조인

 

챕터4. 데이터베이스

 

4.6 조인의 종류

  • 조인 join
    • 하나의 테이블이 아닌 두 개 이상의 테이블을 묶어서 하나의 결과물을 만드는 것
    • MySQL에서는 JOIN이라는 쿼리, MongoDB에서는 lookup 이라는 쿼리로
  • 참고로, MongoDB 사용 시, lookup 최대한 사용 X
    • MongoDB는 조인 연산에 대해 관계형 데이터베이스보다 성능이 떨어짐
  • 여러 테이블 조인하는 작업 많을 경우
    • MongoDB보다는 관게형 데이터베이스 사용 필요
  • 조인의 종류: 내부 조인, 왼쪽 조인, 오른쪽 조인, 합집합 조인

Image

 

4.6.1 내부 조인

  • 두 테이블 간에 교집합

 

4.6.2 왼쪽 조인

  • 테이블 B의 일치하는 부분의 레코드와 함께 테이블 A를 기준으로 완전한 레코드 집합을 생성
  • 테이블 B에 일치하는 항목 없으면 해당 값은 null 값

 

4.6.3 오른쪽 조인

  • 왼쪽 조인 반대

 

4.6.4 합집합 조인

  • 합집합 조인 = 완전 외부 조인
  • 양쪽 테이블에서 일치하는 레코드와 함께 테이블 A와 테이블 B의 모든 레코드 집합을 생성
  • 일치하는 항목이 없으면 누락된 쪽에 null 값이 포함되어 출력

 

4.7 조인의 원리

  • 조인은 조인의 원리를 기반으로 조인 작업
  • 조인의 원리: 중첩 루프 조인, 정렬 병합 조인, 해시 조인

 

4.7.1 중첩 루프 조인 NLJ, Nested Loop Join

  • 중첩 for문과 같은 원리로 조건에 맞는 조인을 하는 방법
  • 랜덤 접근에 대한 비용이 많이 증가 → 대용량 테이블에서 사용 X
  • 블록 중첩 루프 조인
    • 중첩 루프 조인에서 발전
    • 조인할 테이블을 작은 블록으로 나눠서 블록 하나씩 조인하는 방법

 

4.7.2 정렬 병합 조인

  • 각각의 테이블을 조인할 필드 기준으로 정렬하고 정렬이 끝난 이후에 조인 작업을 수행하는 조인
  • 조인할 때 쓸 적절한 인덱스가 없고,
  • 대용량의 테이블들을 조인하고 조인 조건으로 <. > 등 범위 비교 연산자가 있을 때 사용

 

4.7.3 해시 조인

  • 해시 테이블을 기반으로 조인하는 방법
  • 두 개의 테이블 조인 시, 하나의 테이블이 메모리에 온전히 들어간다면 보통 중첩 루프 조인보다 더 효율적
  • 동등 조인에서만 사용
  • MySQL의 경우, 빌드 단계, 프로브 단계로 나뉨
    • 빌드 단계:
      • 입력 테이블 중 하나를 기반으로 메모리 내 해시 테이블을 빌드하는 단계
      • persons 와 countries 라는 테이블 조인 시, 둘 중 바이트가 더 작은 테이블을 기반으로 해서 테이블을 빌드
      • 조인에 사용되는 필드가 해시 테이블의 키로 사용됨
    • 프로브 단계
      • 레코드 읽기 시작
      • 각 테이블은 한 번씩만 읽게 됨
      • 중첩해서 두 개의 테이블을 읽는 중첩 루프 조인보다 보통은 성능이 더 좋음

ImageImage