2017-12-29 38 views
0

사내 관계형 데이터베이스를 테스트 중이며 왜 옵티마이 저가이 쿼리 계획을 파악할 수 있는지 알 수 없습니다. 이 데이타베이스에 의해보고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 JOININNER JOIN이 섞여 있다면 과 같은 결과가 옵티마이 저가 계산할 수 있습니까?

이 사실을 증명하는 이론이 있습니까? 아니면이 경우가 발생합니까?

  1. 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) 동등하다 :

  • 답변

    0

    계획 INNER_JOIN(LEFT_JOIN(A,B),C)의 당량과 INNER_JOIN(INNER_JOIN(B,C),A)는 두 단계를 갖는다. LEFT_JOIN(A,B)을 실행하면 A의 행에 B의 행이 없을 수 있습니다. 이 행은 INNER_JOIN(A,B)에없는 유일한 행입니다. 이 행은 B 속성에 NULL 값을 갖습니다. 그런 다음 B.y을 사용하여 C을 사용하여 내부 조인을 수행하고 B.y이 NULL이고 조인 조건 B.y = C.y이 항상 uknown으로 계산되므로 최종 결과에서 추가 행이 사라져야합니다. 따라서 LEFT_JOIN(A,B)을 처리하더라도 최종 결과에는 INNER_JOIN(A,B)의 행만 있습니다.

    두 번째 등가는 join associativity

    +0

    에서 commes이 어떤 책이나 이론이 그 변환을 설명입니다? 감사. – Bostonian

    +0

    많은 변환은 관계형 대수 재 작성 규칙을 기반으로합니다 (내 대답의 링크 참조). 우리와 같은 더 복잡한 재 작성은 과학 기사에 설명되어 있지만 읽는 것이 어려울 수 있습니다. –

    +0

    https://wiki.epfl.ch/provenance2011/documents/foundations%20of%20databases-abiteboul-1995.pdf와 같은 일부 고전 DBMS 서적을 읽는 것을 고려하십시오. 다른 질의 최적화를 다루는 장이 항상 있습니다. –