2010-04-26 4 views
1

나는 oracle DB를 사용 중이다. 세 개의 테이블에 조인하는 뷰가 하나 있다고 가정 해 보겠습니다. 보기에는 각각 두 개의 필드가 있습니다. 각 필드는 세 테이블 중 두 테이블의 데이터 만 필요로합니다.뷰는 필요한 조인 만 수행합니까, 아니면 모든 조인을 항상 수행합니까?

뷰를 쿼리하고 하나의 필드 만 반환하는 경우 뷰는 여전히 세 개의 테이블 또는 필드 계산에 필요한 두 테이블 만 조인합니까?

답변

2

일반적으로 3 개의 테이블에 충돌해야합니다. 는

SELECT A.VAL, B.VAL, C.VAL FROM A JOIN B ON A.ID = B.ID JOIN C ON A.ID = C.ID 

"A"의 단일 ID 테이블 "C"는 비어 있었다 C. 경우 B 또는 하나에서 제로, 하나 또는 여러 경기를 가질 가능성이있다가, 뷰가 행을 반환하지 않을 것입니다 고려 그래서 그냥 A.VAL 또는 B.VAL을 쿼리하는 경우에도 여전히 "C"에 해당 행이 있는지 확인할 필요가 있습니다.

적용된 참조 무결성 제약 조건으로 인해, 옵티마이 저는 'B'의 행에 항상 'A'의 부모 행이 있음을 알고 있습니다. 이 경우 B.VAL을 선택하면 실제로 'A'의 상위 행이 존재하는지 확인할 필요가 없습니다. 이것은 이것을 통해 입증됩니다 article

+0

감사합니다. – Nate

0

이는 사용중인 조인의 유형에 따라 달라질 수 있습니다. 모두 내부 조인이면 꼭 세 테이블 모두를 검사해야합니다.

0

일반적으로 데이터베이스 엔진은 3 개의 테이블을 모두 결합하여 올바른 대답을 얻습니다.

오라클은 때로 결과를 변경하지 않는 테이블 중 하나를 제거합니다.

  • eleminated 할 테이블에 외래 키 제약 조건 (표 의 행을 찾을 수 보장 할 수있다 즉)

  • 있다 -는 다음과 같은 경우

    수행 할 수 있습니다 그렇지 않으면 표가 사용되지 않습니다. 즉 where 절에서 선택되지 않음.

관련 문제