2008-10-21 3 views
13

SQL 서버하자 나에게 몇 가지 옵션을 선택 UNIQUE (그러나 테이블이 아닌 기본 키)가 될 것입니다 열을 통해 인덱스 생성 :SQL Server에서 UNIQUE 인덱스를 "인덱스"또는 "제약 조건"으로 만드는 것과 다른 점은 무엇입니까?

1)이 제약 될 수 있도록 내가 선택할 수 있습니다 또는 색인.
필자는 제약 조건으로 설정하면 쿼리 할 때만 쓰고 쓸 때 사용하지 않는다는 것을 의미합니다. 그러나 SQL Server가 해당 제약 조건을 적용하는 유일한 방법은 실제로 인덱스를 작성하는 것입니다. 이 옵션의 용도는 무엇입니까? 나는 "인덱스"로 설정하면

2) 또한, 그것은 나를이 중복 키를 무시하도록 지정하자. 이것은 나를 위해 가장 수수께끼입니다 ...
다시 한번 그것이 제약 조건의 반대를 의미한다고 생각합니다. 그것은 아마도 "쿼리 할 때 사용하지만 쓰는 것을 확인하지는 않습니다"라는 의미입니다.
그런데 왜 나는 그것을 UNIQUE로 설정할 것입니까?
SQL Server에서 수행 할 수있는 최적화가 몇 가지 있습니다 만 더 잘 이해하고 싶습니다.

는 사람이 정확히 SQL 서버가이 옵션을 사용하여 무엇을 알고 있나요

?
인덱스를 고유로 설정하고 중복 키를 무시하는 용도는 무엇입니까?

참고 :이 SQL Server에 대한 2000


편집 :에 따르면 내가 제약 조건을 만드는 경우, 그러나 ..., 사용하여 필터 조회 속도를 높이기 위해 사용됩니다 말 제약 조건의 필드?

감사합니다.

+0

나는 항상이 차이에 대해 궁금해합니다. 고유 색인과 고유 제한 g 이의 차이. – leppie

답변

7

UNIQUE 제약은 ISO/ANSI SQL 표준의 일부입니다. SQL Server는 대부분의 SQL DBMS와 마찬가지로 인덱스를 사용하여 UNIQUE 제약 조건을 구현합니다.

논란의 여지는 오히려 SQL 스크립트의 인덱스보다 UNIQUE을 사용하여 입니다 약간 더 휴대용하지만 등 최적화를위한 기회를 provids 경우 항상 독점 구문은 배제 할 수 없다한다

5

SQL 서버는 UNIQUE 제약 조건을 구현하는 인덱스를 구축 할 것입니다. sys.key_constraints보기에서 고유 한 제약 조건을 적용하는 데 사용되는 고유 색인에 대한 참조를 볼 수 있습니다 (2005 년 — 죄송합니다, 2000 년에 해당하는 것을 알지 못합니다). 그러나 두 버전 모두 쿼리 할 때 인덱스를 사용할 것입니다.

차이점은 인덱스를 만들 경우이 내장되어 어떻게보다 효율적으로 제어 할 수 있다는 것입니다. 특히 키와 함께 자주 조회 할 수있는 추가 열을 포함 할 수 있습니다.

두 옵션 모두 기존 데이터의 "중복 키를 무시"할 수 있지만, 기존 복제하는 새로운 값을 삽입하려고하면 모두에서 오류가 발생합니다.

2

는 고유 제한 조건 및 고유 제한은 또한 데이터베이스에 제약 개체로 표시되어 있다는 사실 이외의 고유 인덱스 사이에 실질적인 차이가 없다. 표준 구현 무신론자이기 때문에 인덱스가없는 반면

+0

ORM과 같은 데이터베이스 도구가 고유 키를 인식하고이를 활용할 수 있다는 점에서 고유 인덱스가 아닌 고유 키로 항목을 표시하는 것이 이점이 있습니다. 고유 키는 거의 항상 최소이므로 후보 키입니다. 고유 인덱스는 고유 한 키의 모든 열 ("슈퍼 키"로 함)을 포함하기 때문에 고유 마크는 그렇게 표시된 일반 (성능 증가) 인덱스가 될 수 있습니다. 인덱스를 고유 한 SQL Server로 사용하면 쿼리 최적화에서이 사실을 활용할 수 있습니다. –

+0

Kevin : 고유 키는 기본 키이거나 고유 제한 조건입니다. SQL SQL Server 고유의 제약 조건은 인덱스를 사용하여 구현됩니다. 도메인은 무언가가 유일해야하고 성능에 영향을 미치지 않아야 하는지를 설명합니다 (단순한 부작용 임). –

+0

실제로, 고유 한 제약 조건은 어디에서나 "고유 키"라고 말한 것입니다. 내 게시물은 비록 SQL 서버가 그것들을 동일하게 취급한다고 할지라도 의미 론적 차이점을 지적하기위한 것이었다. SQL Server의 향후 버전에서는 잠재적으로 조회 수혜를 제공하지 않을 수있는 다른 방식으로 고유 한 제약 사항을 구현할 수 있으므로 목표가 성능 일 경우 실제 고유 인덱스를 사용하는 것이 가장 좋습니다 (이러한 규칙은 "수퍼 키"입니다). 목표가 데이터 무결성 인 경우 고유 한 구성 요소입니다 (일반적으로 "후보 키"에 적용됩니다. 다른 것이 낭비이기 때문에). –

2

MSDN에 따르면 고유 제한을 통해 고유 인덱스를 만드는 것과 CREATE UNIQUE INDEX 문을 사용하여 명시 적으로 만드는 것 사이에는 큰 차이가 없습니다. 두 경우 모두 데이터가 동일한 방식으로 고유성에 대해 유효성이 검사되며 쿼리 최적화 프로그램에서 다르게 처리하지 않습니다. 좋은 사례로서, 데이터 무결성이 목표라면 고유 한 제약 조건을 사용하고 다른 현명한 방법으로는 CREATE UNIQUE INDEX 문을 직접 사용하십시오.

Here은 두 가지 접근 방식의 차이점을 설명하는 우수 기사 및 비디오입니다.

관련 문제