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 |