← 질문 목록
#43깊이 0

서브쿼리 언네스팅은 언제 발생하는가?

데이터베이스깊이인덱스·질의

서브쿼리 언네스팅은 중첩된 서브쿼리를 조인 모양으로 펴는 최적화다. 뜻이 그대로 보존될 때만 쓸 수 있다. 어떤 모양까지 펴는지는 DBMS마다 다르다.

구분서브쿼리 유지 (필터링)서브쿼리 언네스팅 (조인)
수행 방식별도 서브플랜 — 상관이면 반복될 수 있음조인 기법(Hash/NL) 선택지 확보
최적화드라이빙 집합 변경 불가조인 순서 및 기법 자유롭게 선택

언네스팅을 거치면 서브쿼리가 메인쿼리와 동등한 조인 대상이 된다. 이에 따라 옵티마이저는 조인 순서 변경이나 해시 조인 등 다양한 최적화 선택지를 얻는다.

주로 IN·EXISTS가 세미 조인으로, NOT IN·NOT EXISTS가 안티 조인으로 변환될 수 있을 때 적용된다. 상관 서브쿼리이더라도 조인 조건이 메인 쿼리의 키와 동등하게 연결되면 흔한 후보가 된다.

집계나 LIMIT 같은 요소가 끼면 DBMS별 제약에 걸린다.

다만 서브쿼리의 결과가 1:N 관계일 때 단순 조인으로 변환하면 메인 쿼리의 결과 집합이 부풀어 오를 수 있다. 그래서 옵티마이저는 세미 조인처럼 있는지만 보는 연산으로 바꾼다. 그러면 따로 중복을 걷어내지 않아도 바깥 행이 안 늘어난다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

서브쿼리 언네스팅은 언제 발생하는가?