← 질문 목록
#356깊이 0
옵티마이저는 왜 서브쿼리를 조인으로 풀어서 실행하는가?
데이터베이스
답변 연습
내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요
다양한 접근 경로를 탐색해 최적의 실행 계획을 세우기 위해서다.
서브쿼리 상태→루프마다 서브쿼리를 반복 평가한다
조인 변환 상태→드라이빙 테이블을 결정하고 해시 조인을 적용한다
서브쿼리가 풀리지 않으면 메인 테이블의 모든 행마다 서브쿼리를 반복해서 실행한다. 이 방식을 서브쿼리 필터링이라고 부르며 대용량 데이터에서 심각한 병목을 일으킨다.
조인으로 변환하면 옵티마이저는 해시 조인이나 루프 조인 등 성능이 검증된 기법을 마음대로 고른다. 테이블 간의 조회 순서도 제약 없이 뒤바꾸며 더 빠른 길을 찾는다.
쿼리 변환이 항상 정답은 아니다. 서브쿼리 결과에 중복 행이 있으면 조인하면서 결과가 부풀어 오른다. 옵티마이저는 이 왜곡을 막으려고 내부적으로 중복을 제거하는 세미 조인으로 변환한다.