외래 키로서 복합 기본 키 효율성


12

테이블에 중복이 입력되지 않도록하는 복합 기본 키 (4 열로 구성)가있는 테이블이 있습니다. 이제이 테이블의 키를 외래 키로 참조 해야하는 새 테이블이 필요합니다.

내 질문은 조회 속도에 어떤 접근 방식이 더 효율적인지입니다.

1) 4 개의 열을 모두 포함하여 새 테이블을 만들고 외래 키로 모두 참조하십시오.

또는

2) 기본 키 테이블에서 새 ID 열을 작성하고이를 새 테이블에서 외래 키로 사용합니까?

이 데이터베이스는 매우 많은 양의 데이터를 보유 할 것으로 예상되므로 각 테이블에 보유 된 데이터의 양을 최소화하기 위해 지금까지 구축했습니다. 이것을 염두에두고, 옵션 2는 모든 행에 대해 2 개의 int 열과 datetime 열을 저장하기 때문에 최선의 접근 방법이지만 불필요한 경우 조회 시간을 늘리지 않으려 고합니다.


1
나는 개인적으로 거의 항상 INT IDENTITY그러한 경우 대리 키 (예 :)를 사용합니다. 테이블을 참조하고 조인하는 것이 훨씬 쉬워졌습니다. 중복을 피하려면 이 4 개의 열에 UNIQUE 제약 조건을 두십시오 . 또한 좁은 기본 키는 성능상의 이유로 클러스터링 키로 사용되는 경우 훨씬 더 좋습니다.
marc_s

답변:


11

간단한 합성 정수 PK를 사용하는 비용은 적으며, 귀하의 경우 이점이 상당 할 것입니다.

  • 당신이 지적했듯이, 당신은 훨씬 더 간단한 FK 관계를 가질 것입니다.
  • 작은 PK는 작고 빠른 지수를 만듭니다. 이러한 열을 추가하면 전체 테이블 스페이스가 줄어들게됩니다.
  • 비즈니스 규칙이 변경되면 테이블을 다시 정렬 할 필요가 없습니다.

염두에 두어야 할 유일한 단점은 복합 PK에서 클러스터링으로 인한 쿼리에서 성능이 저하 될 수 있다는 것입니다. 이것이 중요 할 것으로 생각되면 복합 후보 키에서 클러스터링을 계속하지만 합성 키에 PK를 두는 것보다.


5

SQL 세계에서와 마찬가지로 "답변"입니다.

일부 포인터에 대해서는이 질문을 살펴보십시오. 자연 키는 대리 정수 키보다 SQL Server에서 더 높거나 낮은 성능을 제공합니까?

외래 키로 자연 키를 사용할 때 성능이 향상되는 경우가 있습니다. 그러나 대부분의 경우 더 작은 키를 사용하는 것이 좋습니다 (읽기 : 대리 키).

IDENTITY 열을 소개하면 기본 키로 만들고 "natural"열을 대신 UNIQUE CONSTRAINT로 변경합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.