DB

[DB] 조인 전략

쌈뽕코딩 2025. 5. 19. 19:32

🔗 Join 전략

DB에서 여러 테이블을 연결할 때 사용하는 방식이다.

어떻게 두 테이블을 매칭하고 결과를 만들 것인지에 따라 전략이 나뉜다.

 

🔁 Nested Loop Join

가장 기본적인 방식이다. 말 그대로 반복문 안에 반복문.

한 테이블의 데이터를 하나씩 꺼내서, 다른 테이블을 전부 뒤져서 매칭한다.

  • 작은 테이블 + 인덱스가 있을 때 효과적
  • 느리다 (두 테이블 모두 클 경우 O(N²))

예시

SELECT *
FROM Employees e
JOIN Departments d ON e.dept_id = d.id;
  • Employees의 각 직원마다 Departments 전체를 검색해서 일치하는 id를 찾음

📊 Hash Join

작은 테이블을 해시맵(키-값 쌍)처럼 메모리에 저장한 뒤, 큰 테이블에서 값을 하나씩 비교

  • 해시 테이블을 만들어 매칭
  • 일반적으로 등가 조인 (=)에서 사용
  • 해시 테이블 만들 수 있을 정도의 메모리가 필요하다.
  • 큰 테이블도 비교적 빠르게 처리 가능
  • 인덱스가 없어도 괜찮음

예시

SELECT *
FROM Orders o
JOIN Customers c ON o.customer_id = c.id;
  • Customers가 작고 메모리에 해시로 저장됨 → Orders의 각 고객 ID를 해시로 빠르게 검색

📚 Merge Join

두 테이블이 이미 정렬돼 있거나 인덱스를 통해 정렬되어 있다면, 양쪽을 순차적으로 비교하며 조인

두 권의 정렬된 책 페이지를 넘기면서 같은 단어를 찾는 느낌

  • 두 테이블을 join key로 정렬
  • 포인터를 앞에서부터 하나씩 비교하면서 매칭
  • 정렬이 되어 있거나 인덱스가 잘 잡혀 있을 때 유리하다.
  • 정렬된 테이블이면 매우 빠름 대신, 정렬 과정이 필요하면 비용 증가

예시

SELECT *
FROM Sales s
JOIN Products p ON s.product_id = p.id;
  • Sales, Products 둘 다 product_id로 정렬돼 있다고 가정