우리는 큰 테이블이 [MyTable]
현재 모두를 가지고 Primary Key
, 그리고Unique Non Clustered Index
같은 열에 ( [KeyColumn]
). U NC 인덱스에는 추가 커버링 열이 있습니다.
동일한 열에 PK와 고유 NC 인덱스가 모두 중복 된 것으로 보이므로 기본 키를 삭제하는 대신 참조 무결성 목적으로 고유 비 클러스터형 인덱스를 사용하는 것을 고려하고있었습니다.
테이블은 다른 열에 의해 전체적으로 클러스터됩니다.
즉 우리는 :
ALTER TABLE [MyTable]
ADD CONSTRAINT [PK_MyTable]
PRIMARY KEY NONCLUSTERED ([KeyColumn])
GO
과
CREATE UNIQUE NONCLUSTERED INDEX [IX_MyTable_SomeIndex]
ON [MyTable] ([KeyColumn])
INCLUDE ([Column1], [Column2])
GO
내가 아는 한 기본 키에 포함 열을 추가 할 수 없으므로 다음과 같이하십시오.
- 에 의존하는 외래 키 제약 조건 제거
MyTable.KeyColumn
- 기본 키를
MyTable.KeyColumn
완전히 삭제 - 외래 키를 테이블에 다시 추가합니다 (예 : RI를 통해 시행
MyTable.KeyColumn
)
내가 이것을 생각할 수있는 유일한 의미는 ERD 다이어그램에서 시각적 키 기호를 얻지 못하고 포함 된 열 때문에 (잎) 인덱스 밀도가 적다는 것입니다.
/programming/487314/primary-key-or-unique-index를 읽었 으며이 작업 의 무결성 및 성능 측면에 만족합니다.
내 질문은 :이 접근 방식에 결함이 있습니까?
내가 달성하려는 것을 편집하십시오 : 성능 최적화 및 스프링 청소 . PK 또는 인덱스를 제거하면 인덱스에 필요한 페이지 수가 줄어 듭니다. 쓰기 속도가 빠를뿐 아니라 유지 관리 / 운영상의 이점도 있습니다.
이에 대한 배경 지식을 얻기 위해 PK없이 참조되는 테이블을 본 적이 없습니다. 그러나 열을 덮고있는 NC 인덱스가 테이블에 추가되었다는 사실은 내 생각을 조정해야한다는 것을 의미합니다.