외래 키 인덱스 필요


30

색인, 기본 키 및 외래 키로 어려움을 겪고 있습니다 ... 그리고 그것들을 모두 가질 필요가 있습니다.

두 개의 테이블이 있으면 둘 다 기본 키로 정수를 갖습니다.
첫 번째 테이블은 FK를 통해 두 번째 테이블의 기본 키를 참조합니다.

  • 두 테이블 모두에서 ID 열에 기본 키 인덱스가 있습니다.
  • table1.ref_field두 번째 테이블의 PK를 참조 하는 FK 제약 조건을 만들었습니다 ( table2.id).
  • 나는에 색인을 추가 table1.ref_field

이것이 인덱스, 기본 및 외래 키를 구성하는 가장 좋은 방법입니까?

답변:


30

디자인이 좋습니다. 성능 문제 (디자인 타임에 알 수 없음)가있는 경우 table2.id 열과 동일한 순서 (ASC)로 table1.ref_field 열에 인덱스를 작성해야합니다. 이렇게하면 테이블 / 열에 대한 조인 성능이 향상됩니다. 인덱스를 유지 관리하는 데 오버 헤드가 있으므로 성능 향상의 이점과 비교하여 해당 비용을 측정하려고합니다.

PostgreSQL은 불행하게도 다른 열을 참조하는 외래 키 열에 이러한 인덱스를 자동으로 생성하지 않으므로 직접해야합니다.

같은 주제에 대한 StackOverflow 질문이 있습니다.

외래 키 및 기본 키에 대한 Postgres 및 색인

다음은 이러한 색인을 추가하여 이점을 얻을 수있는 위치를 결정하는 데 도움이되는 쿼리입니다.

PostgreSQL : 외래 키 인덱스


항상 불행한 것은 아닙니다 DELETE. 참조 된 테이블 이 아니라면 사용하지 않는 인덱스를 유지 하지 않고도 많은 I / O 및 CPU를 절약 할 수 있습니다. 기본적으로 생성해야한다고 생각하지만 생성을 억제하는 옵션이 있습니다.
Craig Ringer

Craig Ringer DELETE가 그에 영향을 줄 수있을뿐만 아니라, 테이블에서 하위 테이블을 선택하면 성능 문제도 발생합니다. 오라클의이 문서는 더 자세히 설명합니다 : asktom.oracle.com/pls/asktom/…
777Anon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.