41

기술 개발자가 SQL Server에서 고유성을 적용하는 데 사용하는 방법을 배우는 데 관심이 있습니다 (고유 한 제약 또는 고유 인덱스). 각각의 물리적 구현에 약간의 차이가 있다고 가정하면 어떤 것이 가장 좋을지 어떻게 결정합니까?고유 제한 vs 고유 인덱스

최상의 솔루션을 평가하는 성능 이외의 다른 이유가 있습니까?

데이터베이스 관리 이점이 있습니까?

답변

30

두 가지를 비교하는이 MSDN 기사는 SQL 서버 2000을위한 대부분의 목적을 위해 http://msdn.microsoft.com/en-us/library/aa224827(SQL.80).aspx

는 차이가 없습니다 - 제약 조건은 내부적으로 인덱스로 구현됩니다. 제약 조건을 해제 할 수는 있지만 SQL Server에서는 실제로 작동하지 않습니다.

고유 한 제약 조건을 적용하려는 방식에 따라 FILLFACTOR 등을 조정하려는 경우에만 중요합니다.

보다 효율적인 덮게 색인을 제공하기 위해 SQL Server 2008+에 INCLUDE이 추가되었습니다. 필터링 된 색인 = 행의 하위 집합에 대한 고유 제한 조건/여러 null 무시 등

+2

기사가 좋습니다. 흥미로운 점은 메타 데이터 이외의 "실제적인 차이점이 없다"는 결론을 내린 것입니다. – bobs

+0

tut, tut 인용문 SQL Server 2000 용 MSDN – gbn

+2

@gbn : 사실이지만 변경된 사항이 있습니까? –

26

이들은 not significantly different.입니다. 고유 제한 조건을 만들면 SQL Server가 자동으로 고유 인덱스를 만듭니다.

인덱스를 생성하는 구문으로

, 당신은 더 나은 제어 고유 인덱스를 정의가있을 수 있습니다하는 등

제약 조건이 가장 바람직하다 열, 파일 그룹, 인덱스 필터링 (SqlSvr2008)를 포함, /는 클러스터되지 않은 클러스터 지정하려면 사례는 유일성의 의도를 표현하기 때문에 발생합니다. 제약 조건입니다. 색인은이 의도를 전달하지 않습니다.

관리 효율성은 영향이 미미합니다. 인덱스 (재구성, 재구성)는 ​​제약 조건과 독립적으로 생성 된 것처럼 관리 할 수 ​​있습니다. 유일한 차이점은 제약 조건이 인덱스에 따라 다르므로 인덱스를 삭제하려면 제약 조건을 삭제해야한다는 것입니다.

+1

+1 또한 일관성을 말하고 싶습니다. 어쨌든 색인을 추가하기 위해 제약 조건을 변경하는 경우가 있습니다. – gbn

1

고유 제한 조건은 고유성만을 의미하며, 제한 조건을 제거하면 엔진이 작성한 색인이 제거됩니다. 고유성을 제거하기 위해 색인을 변경할 수 있으며 여전히 색인이 있습니다. 고유성을 강요하는 대다수의 열이 성능상의 이유로 인덱스 역할을한다고 가정 할 수 있습니다. 에르고, 나는 주로 독특한 색인을 사용합니다. 고유해야 할 필요가 있지만 실적이 좋지 않은 열 (예 : 고유해야하는 varchar (200))에서만 고유 한 제약 조건을 사용합니다. 그런 경우 고유 한 인덱스가 있음에도 불구하고 검색하는 것이 좋지 않다는 것을 분명히 지적하고 싶습니다.

2

두 가지 센트 : 성능 향상을 원할 때 비즈니스 로직과 인덱스를 설명하고자 할 때 제약 조건을 사용했습니다. DBMS에서 이들을 동일하게 구현할 수 있다는 사실은 이러한 객체를 정의하는 이유를 구별하는 것이 중요하지 않다는 것을 의미하지는 않습니다.

관련 문제