[DB/SQL] 상관 서브쿼리 vs JOIN 성능 차이

윤하빈·2026년 4월 24일

개발 공부

목록 보기
9/13

1. 방법 1: 상관 서브쿼리 (Correlated Subquery)

메인 쿼리의 값을 서브쿼리에 전달해서 한 행씩 비교하는 방식임.

SELECT E.deptId, E.name, E.salary
FROM emp AS E
WHERE E.salary = (
    SELECT MAX(salary)
    FROM emp
    WHERE deptId = E.deptId  # 바깥쪽 E.deptId를 매번 참조함
);
  • 동작 방식: 직원 한 명 한 명한테 물어보기
    • 홍길동(1번 부서) 차례: "1번 부서 최고 연봉 얼마야?" -> "6000" -> "나는 5000만원이니까 탈락"
    • 홍길순(1번 부서) 차례: "1번 부서 최고 연봉 얼마야?" -> "6000" -> "나는 6000만원이니까 통과"
  • 특징:
    • 직원이 100명이면 서브쿼리도 100번 실행됨.
    • N번 조회이기 때문에, 데이터가 많아질수록 성능이 떨어짐.

2. 방법 2: 인라인 뷰 (Inline View) + JOIN

미리 부서별 최고 연봉 테이블을 만들어두고 한 번에 합치는 방식임.

SELECT E.*
FROM emp AS E
INNER JOIN (
    # 먼저 부서별 최고연봉 표를 딱 한 번만 만듦
    SELECT deptId, MAX(salary) AS maxSalary
    FROM emp
    GROUP BY deptId
) AS M
ON E.deptId = M.deptId AND E.salary = M.maxSalary;
  • 동작 방식: 미리 만든 기준표랑 대조하기
    • 1단계: 부서별 최고 연봉 리스트(M)를 메모리에 딱 1번 생성함.
    • 2단계: 기존 직원 테이블(E)과 이 리스트(M)를 JOIN해서 맞는 데이터만 골라냄.
  • 특징:
    • 서브쿼리는 전체 과정에서 단 1번만 실행됨.
    • 데이터 양이 많을수록 상관 서브쿼리보다 빠름.

4. 요약

비교 항목상관 서브쿼리인라인 뷰 + JOIN
서브쿼리 실행행 개수만큼 반복딱 1번
대량 데이터 성능느림압도적 빠름
코드 가독성직관적이라 이해는 쉬움구조 파악이 필요함

5. 결론

  • 쿼리 짤 때 "DB가 이 작업을 몇 번 반복할까?"를 반드시 고민해야 함.

1개의 댓글

comment-user-thumbnail
2026년 4월 24일

👍👍👍굳밥국밥

답글 달기