2013-10-21 4 views
3

기본 키와 고유 클러스터 된 인덱스 이해 고유 인덱스를 정의 할 때 기본 키가 필요한 이유는 내 질문에 있습니다. 그냥 성능 좋은 데이터베이스 디자인을 고려하십시오. 우리가 클러스터 된 고유 인덱스는 물리적으로 데이터를 정렬하고있는 테이블의 성능을 위해 필요하며, 우리가 기본 키를 정의하거나SQL Server의 기본 키 (클러스터)와 클러스터 된 고유 인덱스 간의 차이

+1

차이점 : 간단히 말해서, 하나는 기본 키이고 다른 하나는 기본 키가 아닙니다. – geomagas

+1

** 기본 키 **는 ** 논리적 ** 구성입니다.이 키는 테이블의 모든 단일 열을 고유하고 안정적으로 식별하는 데 사용됩니다. ** 클러스터 된 인덱스 **는 SQL Server가 해당 저장소를 처리하는 방법에 대한 ** 물리적 ** 구현 세부 정보입니다. –

답변

4

가 "왜 기본 키가 필요 여부를 중요하지 않다 정의 할 때 내 이해 당으로

고유 한 클러스터 인덱스를 정의 할 때 "

아니요.

기본적으로 SQL Server에서 기본 키가있는 테이블을 선언하면 별도의 클러스터형 인덱스를 지정하지 않으면 기본 키에 클러스터형 인덱스가 추가됩니다.

그러나 클러스터 된 인덱스는 테이블의 기본 키를 구성하는 열에있을 필요는 없습니다.

기본 키에 고유 한 비 클러스터형 인덱스가 있고 클러스터형 인덱스가 다른 위치에있는 테이블을 만들 수 있습니다.

+0

... 클러스터 된 인덱스없이 테이블을 가질 수 있습니다. –

+0

실제로는 힙이라고합니다. –

5

SQL Server와 관련하여 null이 허용되지 않는 열과 PK에 대한 고유 인덱스에는 실제적인 차이가 없습니다.

둘 다 고유성을 적용하거나 클러스터되거나 비 클러스터 될 수 있으며 외래 키 제약 조건에 의해 참조 될 수 있습니다.

일부 도구는 정의 된 기본 키가있을 것으로 기대할 수 있습니다.

클러스터 된 인덱스가 "물리적으로 데이터를 정렬"한다는 점에 대해서는 약간의 오해입니다.

이것은 CI의 조각화가없는 경우에만 해당됩니다. 예를 들어, 페이지 분할 후에는 클러스터 된 인덱스 페이지가 파일에서 순서가 잘못 될 가능성이 있습니다.

+0

포스터에서 묻고있는 것이 무엇입니까? –

+1

@MitchWheat - 제목이 그렇게 나타내는 것 같습니다. –