STUDY

SECTION 4.6 조인의 종류 4.7 조인의 원리

Lim임 2026. 3. 18. 13:58

SECTION 4.6 조인의 종류

두 개 이상의 테이블을 묶어서 하나의 결과물을 만드는 것

  • MySQL: JOIN 쿼리
  • MongoDB: lookup 쿼리 (단, 성능이 RDBMS보다 낮아 되도록 사용 지양)

조인 종류 

종류 설명
내부 조인 (INNER JOIN) 두 테이블에서 모두 일치하는 행만 반환
왼쪽 조인 (LEFT OUTER JOIN) 왼쪽 테이블 전체 + 오른쪽 일치 행 (없으면 NULL)
오른쪽 조인 (RIGHT OUTER JOIN) 오른쪽 테이블 전체 + 왼쪽 일치 행 (없으면 NULL)
합집합 조인 (FULL OUTER JOIN) 양쪽 테이블 전체 (일치 안 해도 포함, 없으면 NULL)

 


SECTION 4.7 조인의 원리

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

중첩 for문과 같은 원리로 조인하는 방식

for each row in t1 {
    for each row in t2 {
        if 조건 일치 → 결과 반환
    }
}
  • 랜덤 접근 비용이 높아 대용량 테이블에는 부적합
  • 발전형: 블록 중첩 루프 조인(BNL) — 테이블을 작은 블록으로 나눠 블록 단위로 조인

4.7.2 정렬 병합 조인 (Sort Merge Join)

각 테이블을 조인 필드 기준으로 정렬 후 조인하는 방식

  • 사용 조건:
    • 적절한 인덱스가 없을 때
    • 대용량 테이블 조인 시
    • 조인 조건이 <, >범위 비교 연산자일 때

4.7.3 해시 조인 (Hash Join)

해시 테이블을 기반으로 조인하는 방식 (MySQL 8.0.18부터 지원)

  • 하나의 테이블이 메모리에 올라갈 수 있을 때 중첩 루프 조인보다 효율적
  • 동등(=) 조인에서만 사용 가능
  • 메모리 초과 시 디스크 사용 → 비용 증가

해시 조인 단계

단계 설명
빌드 단계 두 테이블 중 더 작은 테이블을 메모리에 해시 테이블로 빌드. 조인 필드가 해시 키로 사용
프로브 단계 나머지 테이블을 읽으며 해시 테이블에서 일치하는 레코드를 찾아 반환

  • 각 테이블을 한 번씩만 읽으므로 중첩 루프 조인보다 성능 우수
  • 메모리 사용량은 시스템 변수 join_buffer_size로 제어

'STUDY' 카테고리의 다른 글

SECTION 5.2 선형 자료 구조  (0) 2026.03.25
SECTION 5.1 복잡도  (0) 2026.03.25
SECTION 4.5 인덱스  (1) 2026.03.18
SECTION 4.4 데이터베이스의 종류  (0) 2026.03.18
SECTION 4.3 트랜잭션과 무결성  (0) 2026.03.10