사내 관계형 데이터베이스를 테스트 중이며 왜 옵티마이 저가이 쿼리 계획을 파악할 수 있는지 알 수 없습니다. 이 데이타베이스에 의해보고SQL 쿼리에서 혼합 LEFT JOIN 및 INNER JOIN에 대한 실행 계획
SELECT * from A LEFT JOIN B on A.x = B.x INNER JOIN C on B.y = C.y
실행 계획은 사이비 - 코드를 아래와 같이 작성할 수 있습니다 :이 계획에 대한
For each tupleB in B
For each tupleC in C
INNER JOIN tupleB and tupleC
For each tupleA in A
INNER JOIN tupleA
결과는 정확합니다.
모든 JOIN이 INNER 조인 인 경우 INNER JOIN은 교환 가능하고 연관성이 있으므로이 플랜은 나에게 적당합니다.
그러나 LEFT JOIN
과 INNER JOIN
이 섞여 있다면 과 같은 결과가 옵티마이 저가 계산할 수 있습니까?
이 사실을 증명하는 이론이 있습니까? 아니면이 경우가 발생합니까?
INNER_JOIN(LEFT_JOIN(A,B),C)
하는 제 당량이 더 어렵 보는 것이다INNER_JOIN(INNER_JOIN(B,C),A)
등가 INNER_JOIN(INNER_JOIN(A,B),C)
INNER_JOIN(INNER_JOIN(A,B),C)
동등하다 :
에서 commes이 어떤 책이나 이론이 그 변환을 설명입니다? 감사. – Bostonian
많은 변환은 관계형 대수 재 작성 규칙을 기반으로합니다 (내 대답의 링크 참조). 우리와 같은 더 복잡한 재 작성은 과학 기사에 설명되어 있지만 읽는 것이 어려울 수 있습니다. –
https://wiki.epfl.ch/provenance2011/documents/foundations%20of%20databases-abiteboul-1995.pdf와 같은 일부 고전 DBMS 서적을 읽는 것을 고려하십시오. 다른 질의 최적화를 다루는 장이 항상 있습니다. –