같은 결과, 더 낮은 비용

쿼리 변환은 SQL 의미는 유지하고, 실행하기 쉬운 형태로 다시 쓰는 과정입니다.

옵티마이저는 중간 껍질을 벗기고, 필터를 더 이르게 적용하고, 필요하면 조건을 분기해서 더 싼 실행 계획 후보를 만듭니다.

원본 SQL에 자주 보이는 형태

WHERE id IN (SELECT ...)
FROM (SELECT ... FROM t) v
WHERE a = 1 OR b = 2

결과는 맞아도 서브쿼리, 뷰, OR가 그대로 남아 있으면 조인 순서와 인덱스 선택이 답답해질 수 있습니다.

옵티마이저가 바꾸는 세 가지 축

1 구조 단순화
IN (SELECT ...) 는 세미 조인으로, FROM (SELECT ...) 는 직접 테이블 접근으로 풀어냅니다.
중간 계층을 줄이면 어떤 테이블을 먼저 읽고 어떻게 조인할지 더 자유롭게 고를 수 있습니다.
2 조건 앞당김
조인 조건에서 새 필터를 추론하고, WHERE 조건을 뷰·서브쿼리 안쪽으로 밀어 넣습니다.
필터가 빨리 적용될수록 읽는 행 수가 먼저 줄어들어 이후 연산 비용도 함께 내려갑니다.
3 OR 분기
a = 1 OR b = 2 를 UNION ALL 같은 분기 형태로 다시 써 각 조건이 자기 경로를 쓰게 만듭니다.
한 번의 넓은 스캔 대신, 각 분기가 자기 인덱스를 활용하는 더 싼 계획이 가능해집니다.
최종 효과 같은 의미의 SQL을 더 효율적으로 실행
후보 행 감소 불필요한 행을 초반에 걸러냅니다.
인덱스 활용 증가 조건별로 더 적합한 접근 경로를 선택합니다.
계획 선택 폭 확대 조인 순서와 실행 전략을 더 유연하게 고릅니다.