같은 결과, 더 작은 중간 결과

투영을 먼저 하면 조인이 넓은 튜플을 끌고 다니지 않습니다

투영 푸시다운은 최종 결과에 필요한 열과 조인 키만 남긴 뒤 조인해서, 중간 단계의 메모리 사용량과 I/O를 줄이는 최적화입니다.

공통 목표
π(이름)(학생 ⋈ 수강)

최종적으로 필요한 것은 학생 이름뿐입니다. 차이는 어떤 열들을 조인 단계까지 끌고 가느냐에 있습니다.

비효율 경로

먼저 조인한 뒤 마지막에 이름만 남김

불필요한 열까지 함께 결합되므로 중간 결과가 넓습니다.

조인 입력

학생[학번, 이름, 학과, 학년] 수강[학번, 과목, 학점, 학기]

조인 버퍼에 필요 없는 속성도 같이 들어갑니다.

조인 수행

중간 결과

π(이름)(학생 ⋈ 수강)

이름만 쓰더라도 이미 넓은 튜플이 만들어져 메모리와 I/O를 소비합니다.

최적화 경로

조인 전에 필요한 열만 먼저 투영

조인 키와 결과 열만 남겨 입력 자체를 좁게 만듭니다.

조인 입력

π(학번, 이름)(학생) π(학번)(수강)

학번으로 조인하고 이름만 출력하므로, 필요한 열만 유지합니다.

조인 수행

중간 결과

π(이름)(π(학번, 이름)(학생) ⋈ π(학번)(수강))

같은 이름 목록을 얻으면서도 중간 결과 폭이 줄어 조인 비용이 낮아집니다.

핵심

투영 푸시다운은 같은 최종 결과를 유지한 채, 조인 이전의 데이터 폭을 줄여 처리 비용을 낮추는 규칙입니다.