SQLP

시험 직전 요약장

판단 기준과 헷갈리는 개념, 대표 예제를 짧게 확인하세요.

이론 목록

Query Transformation 기초: Query Block·동등 변환·Plan 탐색

원래 이론 →

판단 기준

Oracle Optimizer의 전체 흐름은 다음 세 역할로 나누어 이해할 수 있습니다.

역할핵심 질문대표 산출물
Query Transformer같은 결과를 만드는 다른 Query 형태가 있는가?Unnesting·Merging·Pushing·Expansion 후보
Estimator각 후보에서 몇 행이 남고 어느 정도 자원이 필요한가?Selectivity·Cardinality·Cost 추정
Plan Generator어떤 Access·Join·Sort 조합이 가장 유리한가?최종 실행계획

예를 들어 다음 SQL을 생각해 봅니다.

SQL
SELECT o.order_id,
       o.customer_id
FROM   orders o
WHERE  EXISTS (
           SELECT 1
           FROM   customers c
           WHERE  c.customer_id = o.customer_id
           AND    c.grade = 'VIP'
       );

Query Transformer는 EXISTS Subquery를 Semi Join 형태로 Unnesting할 수 있는지 검토합니다. Validity를 통과하면 CUSTOMERS가 Main Query의 Join 후보로 들어올 수 있습니다. Estimator는 VIP 고객 수와 주문 Match 수를 추정하고, Plan Generator는 NESTED LOOPS SEMI, HASH JOIN SEMI 등의 물리 후보를 비교합니다.

도식
EXISTS Subquery
→ Unnesting Validity 검토
→ Semi Join 논리 후보 생성
→ Cardinality·Cost 추정
→ Join Order·Join Method 비교
→ 물리 Operation 선택

이 부분의 원문 →

헷갈리는 개념

다음은 논리 Transformation입니다.

예시·텍스트
Subquery Unnesting
View Merging
Predicate Pushing
OR Expansion
Join Elimination
Join Factorization

다음은 실행계획의 물리 Operation입니다.

예시·텍스트
TABLE ACCESS FULL
INDEX RANGE SCAN
NESTED LOOPS SEMI
HASH JOIN ANTI
FILTER
VIEW
SORT GROUP BY
UNION-ALL

관계는 다음과 같습니다.

도식
논리 변환 후보 생성
→ 새로운 물리 Plan 탐색 공간 개방
→ Cardinality·Cost 비교
→ 물리 Operation 조합 선택

예를 들어 UNION-ALL이 보이면 OR Expansion일 가능성이 있지만, 원래 SQL에 이미 UNION ALL이 있었거나 다른 Transformation에서 생성됐을 수도 있습니다. 따라서 Operation 한 줄만 보고 변환 이력을 단정하지 않고 Query Text·Query Block·Outline·Predicate를 함께 확인합니다.


이 부분의 원문 →

대표 계산·예제

예를 들어 다음 EXISTS는 고객별 존재 여부만 확인하므로 고객 한 행을 최대 한 번 반환합니다.

이 부분의 원문 →

내 최근 연습 오답

현재 브라우저의 연습 채점 기록에서 공개된 단원과 연결된 오답을 확인합니다.

학습 기록 →

오답 기록을 확인하고 있습니다.