Optimize

서브쿼리 최적화 가이드

정답 문법보다 중요한 것은 DBMS가 어떤 실행 계획으로 바꾸는지 확인하는 것입니다.

의도 명확화
인덱스/계획
NULL 안전성
EXISTS

존재 여부는 명확하게

값 목록보다 존재 조건이 목적이면 EXISTS가 의도를 잘 드러냅니다.

NOT IN

NULL 제거

서브쿼리 결과에 NULL이 들어갈 수 있으면 NOT EXISTS가 더 안전합니다.

Index

상관 조건 인덱스

외부 값과 연결되는 내부 컬럼에 인덱스가 있어야 반복 탐색 비용을 줄입니다.

Unnesting옵티마이저가 서브쿼리를 semi join이나 join으로 풀 수 있는지 확인합니다.
Rewrite반복 실행이 크면 JOIN, CTE, 윈도우 함수로 바꿔 비교합니다.
EXPLAINSubplan 반복, 추정 행 수, 실제 실행 시간을 보고 결정합니다.