SQL Server에서 고유 한 인덱스를 "색인"또는 "제약 조건"으로 만드는 것의 차이점은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/222065

문제

SQL Server는 몇 가지 옵션을 선택하겠습니다.

1) 제약 또는 색인으로 선택할 수 있습니다.
나는 이것이 제약으로 설정하면 쿼리 할 때만 사용하지 않을 때만 사용하지 않는다는 것을 의미합니다. 그러나 SQL Server가 제약을 시행하는 유일한 효율적인 방법은 실제로 인덱스를 구축하는 것입니다. 이 옵션에 사용되는 것은 무엇입니까?

2) 또한 "index"로 설정하면 중복 키를 무시해야한다고 지정하겠습니다. 이것은 나에게 가장 수수께끼입니다 ...
다시 제약의 반대를 의미한다고 생각합니다. 아마도 "쿼리 할 때 사용하지만 쓸 때도 확인하지 마십시오"를 의미합니다.
그러나 왜 내가 그것을 독특하게 설정했을까요?
SQL Server가 할 수있는 몇 가지 최적화가 있다고 생각하지만 더 잘 이해하고 싶습니다.

이러한 옵션에서 정확히 SQL Server가 무엇을하는지 아는 사람이 있습니까?
인덱스를 고유 한 것으로 설정하는 유스 케이스는 무엇입니까? 그러나 중복 키를 무시합니까?

참고 : 이것은 SQL Server 2000 용입니다


편집하다: 그러나 당신이 말한 것에 따르면 ... 제약 조건을 만들면 제약 조건에서 필드를 사용하여 필터를 속도를 높이는 데 사용됩니까?

감사!

도움이 되었습니까?

해결책

UNIQUE 제약 조건은 ISO/ANSI SQL 표준의 일부이며, 인덱스는 표준이 구현되지 않기 때문이 아닙니다. 대부분의 SQL DBMS와 공통적으로 SQL Server는 인덱스를 사용하여 UNIQUE 강제.

아마도 사용 UNIQUE SQL 스크립트의 색인보다는입니다 약간 보다 휴대 가능하지만 항상 최적화를위한 기회를 제공하는 경우 독점 구문을 배제해서는 안됩니다.

다른 팁

SQL Server는 고유 한 제약 조건을 구현하기위한 색인을 구축합니다. 고유 한 제약을 시행하는 데 사용되는 고유 한 인덱스에 대한 참조를 볼 수 있습니다. sys.key_constraints 보기 (2005 년 - 죄송합니다. 2000에 해당하는 것을 모르겠습니다). 그러나 두 버전 모두 쿼리시 인덱스를 사용합니다.

차이점은 인덱스를 작성하면 구축 방식을 더 많이 제어 할 수 있다는 것입니다. 특히 키와 함께 자주 찾을 수있는 추가 열을 포함시킬 수 있습니다.

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

고유 한 제약 조건과 고유 한 제약 조건이 데이터베이스의 제약 조건 객체로 나열되어 있다는 사실 이외의 고유 한 인덱스 사이에는 실질적인 차이가 없습니다.

MSDN에 따르면, 고유 한 제약 조건을 통해 고유 한 인덱스 생성 또는 고유 한 인덱스 명령문을 사용하여 명시 적으로 작성하는 것 사이에는 큰 차이가 없습니다. 두 경우 모두, 데이터는 동일한 방식으로 고유성을 검증하고 쿼리 옵티마이저도 다르게 처리하지 않습니다. 모범 사례로서 데이터 무결성이 목표 인 경우 고유 한 제약 조건을 사용하십시오. 다른 현명한 사용은 고유 한 인덱스 문을 직접 만듭니다.

여기 훌륭한 기사와 두 가지 접근 방식의 차이점을 설명하는 비디오입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top