11

는이 같은 상황이 :외래 키 제약 조건이 Oracle의 쿼리 변환에 영향을 줍니까?

create table a(
    a_id number(38) not null, 
    constraint pk_a primary key (id) 
); 

create table b(
    a_id number(38) not null 
); 

create index b_a_id_index on b(a_id); 

이제 b.a_id이 사실 a.a_id을 참조하는 외래 키가 될 의미하지만 공식적으로 같은 선언되지 않았습니다. 분명히 그것은 무결성을 이유로 있어야합니다. 그러나 외래 키 제약 조건은 일반적으로 또는 특정 경우에 조인 성능을 향상 시키는가? 그렇다면 어떤 유형의 쿼리 변환이 필요합니까?

이 주제에 관한 관련 문서가 있습니까?

나는 쿼리 성능을 향상시킬 수있는 장소에 외래 키 제약 조건을 가지고, 오라클 11g (11.2.0.2.0)

답변

13

Yes (예)를 사용하고 있습니다. 일반적으로 사용할 수없는 적절한 외래 키 제약 조건이 존재할 때 옵티 마이저에 열린 다양한 변환이 있습니다. 예를 들어, AB을 조인하고 B의 데이터 만 선택하는 경우 옵티마이 저는 외래 키 제약 조건이있는 경우 쿼리 계획에서 A을 완전히 제거 할 수 있습니다 (이런 종류의 일은 매우 유용합니다. 추가보기의 성능 비용을 기존보기를 사용하지 않고 코드 재사용과 교환 할 필요가 없기 때문에 현재 쿼리보다 많은 테이블에 조인하는 유용한 뷰가 있습니다. 또한 쿼리 재 작성과 같은 것을 사용하여 쿼리를 다시 작성하여 데이터웨어 하우스/DSS 유형 시스템에서 구체화 된보기를 사용하는 것과 같은 일을 할 때 유용합니다.

Tom Kyte는 다른 메타 데이터와 함께 다양한 유형의 제약 조건이 옵티 마이저에 미치는 영향에 대해 설명하는 Metadata Matters 프리젠 테이션을 제공합니다.

+0

나는 전에 이런 식으로 읽었을 것이라고 확신했다. 그것은 어쨌든 명백하게 보인다. 좋은 답변과 링크를 가져 주셔서 감사합니다! –

+1

깨진 링크, 제 생각 엔 프레젠테이션이 이것입니다 : http://docslide.us/documents/metadata-matters-by-tom-kyte-oracle.html – gaps96

1

Justin 이미 지적했듯이 JOIN 제거는 필수 비 비용 기반 SQL 변환이며 메타 데이터 만 존재할 경우 적용 할 수 있습니다. 그래서 외래 키 제약 조건을 추가, 내가 원래 가정으로

, 메타 데이터에 따라 SQL 변환이 많이있다 (그리고 : 나는 최근에 이것에 대해 블로그에 한 다른 제약 조건)은 확실히 긍정적 인 방법으로 성능에 영향을 줄 수 있습니다.

관련 문제