← 질문 목록
#22깊이 0

서브쿼리를 언제 조인으로 재작성해야 성능이 향상되는가?

데이터베이스심화인덱스·질의

옵티마이저조인 쪽에서 더 많은 경로를 살펴본다. 서브쿼리로 두면 블록 단위로만 최적화돼 전체를 보는 기회를 놓치기 쉽다.

기준서브쿼리조인 (Join)
실행 방식독립된 블록 또는 반복 실행다양한 조인 알고리즘 선택
결과 행 수안쪽 중복으로 바깥 행이 늘지 않음관계에 따라 중복 발생 가능
최적화 범위언네스팅되지 않으면 블록 안으로 제한조인 순서·알고리즘 후보가 넓어짐

상관 서브쿼리는 외부 행마다 다시 도는 모양이라 느려 보인다. 다만 옵티마이저가 조인으로 펴면 반복 평가를 피할 수 있다 — 실제 횟수는 고른 조인 계획에 달렸다. 실행 계획을 봐야 안다.

조인으로 바꿀 때는 일대다에서 행이 불어나는 것을 조심한다.

IN이나 EXISTS처럼 있는지만 보는 서브쿼리는 안쪽에 중복이 있어도 바깥 행 수를 안 늘린다. 단순 조인으로 바꾸면 안쪽 키에 중복이 있는 한 DISTINCT나 GROUP BY를 붙여야 한다. 그러면 오히려 느려진다.

옵티마이저는 조건이 맞는 서브쿼리를 언네스팅해 조인으로 바꿀 수 있다.

개발자가 성능 개선을 위해 수동으로 변환하기 전에, 옵티마이저의 실행 계획을 먼저 확인하고 자동 최적화가 작동하지 않고 실측에서 이득이 확인될 때만 수동으로 변환한다.

추천 꼬리질문

0/300

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

관련 질문

서브쿼리를 언제 조인으로 재작성해야 성능이 향상되는가?