고유 인덱스 만들기
고유 인덱스를 만들면 키 값이 중복되지 않습니다. UNIQUE 제약 조건을 만드는 것과 제약 조건의 영향을 받지 않는 고유 인덱스를 만드는 것에는 큰 차이가 없습니다. 데이터 유효성 검사는 이와 동일한 방식으로 수행됩니다. 쿼리 최적화 프로그램에서는 제약 조건에 따라 생성된 고유 인덱스와 수동으로 만든 고유 인덱스를 동일하게 취급합니다. 그러나 데이터 무결성을 유지하는 것이 중요한 경우에는 열에 UNIQUE 제약 조건을 만들어야 합니다. 이렇게 하면 인덱스의 용도가 분명해집니다.
일반적인 구현 방법
고유 인덱스는 다음과 같은 방법으로 구현됩니다.
- PRIMARY KEY 또는 UNIQUE 제약 조건
PRIMARY KEY 제약 조건을 만들 때 테이블에 클러스터형 인덱스가 없으며 고유 비클러스터형 인덱스를 지정하지 않은 경우 열에 고유 클러스터형 인덱스가 자동으로 생성됩니다. 기본 키 열에는 NULL 값이 허용되지 않습니다.
UNIQUE 제약 조건을 만들면 고유 비클러스터형 인덱스가 생성되어 기본적으로 UNIQUE 제약 조건을 적용합니다. 테이블에 클러스터형 인덱스가 없는 경우 고유 클러스터형 인덱스를 지정할 수 있습니다.
자세한 내용은 PRIMARY KEY 제약 조건 및 UNIQUE 제약 조건을 참조하십시오. - 제약 조건의 영향을 받지 않는 인덱스
한 테이블에 고유 비클러스터형 인덱스를 여러 개 정의할 수 있습니다.
자세한 내용은 CREATE INDEX(Transact-SQL)를 참조하십시오. - 인덱싱된 뷰
인덱싱된 뷰를 만들기 위해 하나 이상의 뷰 열에 고유 클러스터형 인덱스가 정의됩니다. 뷰가 실행되고(구체화되고) 클러스터형 인덱스에 테이블 데이터가 저장되는 것과 동일한 방법으로 결과 집합이 인덱스의 리프 수준에서 저장됩니다. 자세한 내용은 인덱싱된 뷰 만들기를 참조하십시오.
중복 값 문제 해결
키 열에 중복 값이 있으면 고유 인덱스나 제약 조건을 만들 수 없습니다. 예를 들어 FirstName과 LastName 열에 고유 복합 인덱스를 만들려는 경우 테이블의 FirstName과 LastName
열에 'Jane'
값과 'Smith' 값이 포함된 두 개의 행이 있으면 고유 인덱스를 만들 수 없습니다. 다음과 같은 방법으로 이 문제를 해결할 수 있습니다.
- 인덱스 정의에서 열을 추가하거나 제거하여 고유 복합 인덱스를 만듭니다. 앞의 예에서는 인덱스 정의에 MiddleName 열을 추가하여 중복 문제를 해결할 수 있습니다.
- 중복 값이 데이터 입력 오류로 인한 것이면 데이터를 직접 수정한 다음 인덱스나 제약 조건을 만듭니다.
IGNORE_DUP_KEY 옵션을 사용한 중복 값 처리
고유 인덱스 또는 제약 조건을 만들거나 수정할 때 IGNORE_DUP_KEY 옵션을 ON 또는 OFF로 설정할 수 있습니다. 이 옵션은 인덱스가 생성된 후 여러 행의 INSERT 문에 있는 중복 키 값에 대한 오류 응답을 지정합니다. IGNORE_DUP_KEY를 기본값인 OFF로 설정하면 SQL Server 2005 데이터베이스 엔진 에서는 하나 이상의 행에 중복 키 값이 포함된 경우 문의 모든 행을 거부합니다. ON으로 설정하면 중복 키 값이 포함된 행만 거부되고 중복되지 않는 키 값은 추가됩니다.
예를 들어 하나의 문이 고유 인덱스가 있는 테이블에 20개의 행을 삽입할 때 10개의 행에 중복 키 값이 있으면 기본적으로 20개의 행이 모두 거부됩니다. 그러나 이 IGNORE_DUP_KEY 인덱스 옵션을 ON으로 설정하면 중복되는 10개의 키 값만 거부되고 중복되지 않는 나머지 10개의 키 값은 테이블에 삽입됩니다.
이 옵션 설정은 인덱스의 메타데이터에 저장됩니다. 현재 설정을 표시하려면 sys.indexes 카탈로그 뷰를 사용합니다.
[!참고] 뷰에 만든 인덱스 또는 XML 인덱스에는 IGNORE_DUP_KEY를 지정할 수 없습니다.
NULL 값 처리
인덱싱 작업에서 NULL 값은 동일한 값으로 간주됩니다. 따라서 둘 이상의 행에서 키 값이 NULL인 경우에는 고유 인덱스 또는 UNIQUE 제약 조건을 만들 수 없습니다. 고유 인덱스 또는 UNIQUE 제약 조건을 만들 열을 선택할 때는 NOT NULL로 정의된 열을 선택합니다.
디스크 공간 요구 사항
고유 인덱스의 디스크 공간 요구 사항을 결정하는 작업은 클러스터형 인덱스 및 비클러스터형 인덱스의 디스크 공간 요구 사항을 결정하는 작업과 같습니다. 인덱스의 디스크 공간 요구 사항에 대한 자세한 내용은 인덱스 디스크 공간 요구 사항 확인을 참조하십시오.
테이블을 만들 때 인덱스를 만들려면
기존 테이블에 인덱스를 만들려면
참고 항목
개념
채우기 비율
index create memory 옵션
인덱스 수정
인덱스를 파일 그룹에 배치
PRIMARY KEY 제약 조건
UNIQUE 제약 조건
관련 자료
ALTER INDEX(Transact-SQL)
sys.indexes(Transact-SQL)