선택 푸시다운

조건이 붙는 릴레이션을 먼저 줄이면 조인이 가벼워진다

선택 조건 학과='컴퓨터' 는 학생 릴레이션에만 걸립니다. 그래서 조인 바깥에서 늦게 거르지 말고, 학생을 먼저 줄인 뒤 수강과 결합해도 결과는 같습니다.

전제

조건은 학생에만 의미가 있다

수강 릴레이션에는 학과 정보가 없으므로, 이 조건은 학생 쪽으로만 안전하게 밀어 넣을 수 있습니다.

σ(학과='컴퓨터')(학생)
핵심 변환

조인 전에 학생 집합을 먼저 축소

옵티마이저는 같은 의미를 유지한 채, 조인 입력을 줄이는 방향으로 식을 재작성합니다.

σ(학과='컴퓨터')(학생 ⋈ 수강)
≡ σ(학과='컴퓨터')(학생) ⋈ 수강
학생 전체
조건을 아직 적용하지 않은 큰 입력
컴퓨터학과 학생만
선택 연산으로 먼저 튜플 수를 줄임
수강과 조인
더 작은 학생 집합으로 같은 결과 계산

핵심은 결과를 바꾸지 않고 조인 전에 입력 크기를 줄인다는 점입니다.

밀어넣기 후

작아진 입력으로 조인

선택을 먼저 실행하면 조인 단계는 필요한 학생 튜플만 다룹니다. 큰 중간 결과를 만들 이유가 없어집니다.

[컴퓨터학과 학생] ⋈ 수강
밀어넣기 전

불필요한 튜플까지 먼저 결합

학생과 수강을 먼저 조인하면, 나중에 버릴 학생의 수강 정보까지 중간 결과에 포함됩니다.

(학생 ⋈ 수강) → σ(학과='컴퓨터')
왜 중요할까

조인 비용과 중간 결과가 함께 줄어든다

처리할 튜플 수 감소 선택 후 조인하므로 조인 입력 자체가 더 작습니다.
같은 결과 유지 조건이 학생에만 걸리기 때문에 의미는 바뀌지 않습니다.
핵심 규칙: 선택 조건이 한 릴레이션의 속성만 참조하면, 그 릴레이션 안으로 선택을 먼저 밀어 넣고 나서 조인한다.