Craig Freedman의 블로그 인 Nested Loops Join 에서 중첩 루프 조인이 올바른 외부 조인을 지원할 수없는 이유를 설명합니다.
문제는 외부 테이블의 각 행마다 한 번씩 내부 테이블을 여러 번 스캔한다는 것입니다. 이러한 다중 스캔 중에 동일한 내부 행이 여러 번 발생할 수 있습니다. 어떤 시점에서 우리는 특정 내부 행이 참여하지 않을 것이라고 결론 지을 수 있습니까?
누군가 간단하고 교육적인 방법으로 이것을 설명해 주시겠습니까?
루프가 외부 테이블 ( R1
)로 시작 하고 내부 ( R2
)를 스캔 한다는 의미 입니까?
에 R1
참여하지 않는 값 의 경우 결과 집합이 ( ) 가되도록 값 R2
으로 바꿔야한다는 것을 이해합니다 . 나를 위해 어떤 값을 반환 할지 알 수 없기 때문에 조인하지 않으면 값 을 반환하는 것이 불가능 해 보입니다 . 그러나 그것이 설명 된 방식이 아닙니다. 아니면?NULL
NULL, R2
R2
R1
R2
실제로 SQL Server는로 최적화하고 대체 RIGHT JOIN
하는 LEFT JOIN
경우가 많지만 문제는 로직 을 사용 / 지원 하는 것이 기술적으로 불가능한 이유를 설명 하는 NESTED LOOPS JOIN
것 RIGHT JOIN
입니다.