실행 계획 먼저 보기
좋은 신호는
Semi Join
, 주의 신호는
Subplan
입니다
같은 서브쿼리라도 핵심은 문법이 아니라
실행 방식
입니다.
Semi Join
이면 옵티마이저가 조인으로 흡수한 상태이고,
Subplan
이면 외부 행과 함께 다시 평가될 여지가 남습니다.
질문
Semi Join
조인으로 바뀐 상태
Subplan
서브쿼리가 그대로 남은 상태
무슨 뜻?
외부 쿼리와 한 번의 결합 흐름으로 정리됩니다.
서브쿼리를 별도 단계로 반복 평가하기보다, 조인 계획 안에서 함께 처리할 가능성이 큽니다.
서브쿼리 노드가 계획에 남아 있습니다.
상관 서브쿼리나 스칼라 서브쿼리라면 외부 행 수만큼 조건을 다시 확인하는 형태가 될 수 있습니다.
대량 데이터에서
대체로 좋은 출발점
남은 쟁점은 조인 조건의 선택도, 필터 컬럼의 인덱스, 읽는 행 수를 얼마나 줄였는가입니다.
반복 평가 비용이 커질 수 있음
외부 결과가 많아질수록 같은 탐색과 스캔이 누적될 수 있으므로, 실행 시간이 급격히 늘어나는 구간을 만들기 쉽습니다.
다음 행동
1
조인 조건 점검
결합 조건이 불필요하게 넓지 않은지 확인합니다.
2
필터 인덱스 확인
조인 후 남는 탐색 비용이 큰지 봅니다.
1
재작성 우선
상관/스칼라 서브쿼리는
JOIN
,
EXISTS
, 윈도우 함수로 바꿀 수 있는지 봅니다.
2
서브쿼리 내부 인덱스 확인
WHERE
절 컬럼이 빠르게 탐색되는지 확인합니다.
3
읽는 양 줄이기
불필요한 컬럼, 중첩 뷰,
SELECT *
를 먼저 정리합니다.
핵심:
서브쿼리 자체가 문제가 아니라, 실행 계획에서
Semi Join으로 흡수되었는지
아니면
Subplan으로 남았는지
가 성능 판단의 첫 분기점입니다.