2009-07-29 4 views
4

나는 다음과 같은 스키마가 있다면, 의미하는 것 : 내가 B_data과 여기에 설명 된 관계를 사용하여 C_data를 검색하고 싶다면는 SQL 내부의 테이블 조인 '건너 뛰기'

create table tableA(
    A_id number not null primary key 
); 

create table tableB(
    B_id number not null primary key, 
    A_id number not null references tableA(A_id), 
    B_data text not null 
); 

create table tableC(
    C_id number not null primary key, 
    A_id number not null references tableA(A_id), 
    C_data text not null 
); 

을, 어떤 차이 사이가 다음

select 
    b.B_data, 
    c.C_data 
from 
    tableB b 
    inner join tableC c 
     on b.A_id = c.A_id; 

과 :

select 
    b.B_data, 
    c.C_data 
from 
    tableB b 
    inner join tableA a 
     on b.A_id = a.A_id 
    inner join tableC c 
     on a.A_id = c.A_id; 

내가 SUS 대부분의 데이터베이스는 쿼리가 동일하게 최적화 될 것이지만, tableA에 대한 외래 키 제약은 tableA을 통해 훨씬 효율적으로 합류 할 수 있습니까? 이 쿼리가 다른 결과를 낼 수있는 경우가 있습니까?

답변

2

직접 참여할 수도 있습니다. 외래 키 제약 조건은 조인을보다 효율적으로 수행하기 위해 아무 것도하지 않습니다. 인덱스 (DBMS에 따라 다름)는 외래 키와 별개의 문제 일 수 있습니다. 어느 쪽이든, 작업 할 색인이 있다면, 외래 키로 갈 것인지 여부에 관계없이 가질 수 있습니다.

1

첫 번째 버전이 정상적으로 작동합니다. 외래 키 관계는 참조 무결성에 관한 것이므로 정의 된대로 반드시 트래버스해야 할 필요는 없습니다.