본문 바로가기
Boaz/Computer Science

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

by 남디윤 2025. 2. 24.

 

목차

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