다음을 통해 공유


클러스터형 인덱스 만들기

몇 가지 경우를 제외하고 모든 테이블에는 클러스터형 인덱스가 있어야 합니다. 쿼리 성능을 향상시키는 것 외에도 요청 시 클러스터형 인덱스를 다시 작성하거나 다시 구성하여 테이블 조각화를 제어할 수 있습니다. 뷰에서 클러스터형 인덱스를 만들 수도 있습니다.

일반적인 구현 방법

클러스터형 인덱스는 다음과 같은 방법으로 구현됩니다.

  • PRIMARY KEY 및 UNIQUE 제약 조건

    PRIMARY KEY 제약 조건을 만들 때 테이블에 클러스터형 인덱스가 없으며 고유 비클러스터형 인덱스를 지정하지 않은 경우 열에 고유 클러스터형 인덱스가 자동으로 생성됩니다. 기본 키 열에는 NULL 값이 허용되지 않습니다.

    UNIQUE 제약 조건을 만들면 고유 비클러스터형 인덱스가 생성되어 기본적으로 UNIQUE 제약 조건을 적용합니다. 테이블에 클러스터형 인덱스가 없는 경우 고유 클러스터형 인덱스를 지정할 수 있습니다.

    제약 조건의 일부로 생성된 인덱스에는 제약 조건 이름과 같은 이름이 자동으로 지정됩니다. 자세한 내용은 PRIMARY KEY 제약 조건UNIQUE 제약 조건을 참조하십시오.

  • 제약 조건의 영향을 받지 않는 인덱스

    비클러스터형 PRIMARY KEY 제약 조건이 지정된 경우 기본 키 열이 아닌 열의 클러스터형 인덱스를 만들 수 있습니다.

  • 인덱싱된 뷰

    인덱싱된 뷰를 만들기 위해 하나 이상의 뷰 열에 고유 클러스터형 인덱스가 정의됩니다. 뷰가 구체화되고 클러스터형 인덱스에 테이블 데이터가 저장되는 것과 동일한 방법으로 결과 집합이 인덱스의 리프 수준에 저장됩니다. 자세한 내용은 인덱싱된 뷰 만들기를 참조하십시오.

키 열 선택

테이블당 하나의 클러스터형 인덱스만 있을 수 있으므로 클러스터형 인덱스를 만들 열을 결정하는 것은 매우 중요합니다. 올바른 열을 선택하는 방법은 클러스터형 인덱스 디자인 지침을 참조하십시오.

클러스터형 인덱스의 인덱스 키는 ROW_OVERFLOW_DATA 할당 단위에 기존 데이터가 있는 varchar 열을 포함할 수 없습니다. varchar 열에 대한 클러스터형 인덱스를 만들고 기존 데이터가 IN_ROW_DATA 할당 단위에 있는 경우에는 데이터를 행 외부로 밀어넣는 열에 대한 후속 삽입 또는 업데이트 동작이 실패합니다. 할당 단위에 대한 자세한 내용은 테이블 및 인덱스 구성을 참조하십시오.

디스크 공간 요구 사항

클러스터형 인덱스 구조를 만들 때는 각 파일과 파일 그룹에서 기존(원본) 구조와 새(대상) 구조를 위한 디스크 공간이 모두 필요합니다. 기존 구조는 인덱스 생성 트랜잭션이 커밋된 후 할당 취소됩니다. 정렬에 사용할 임시 디스크 공간이 추가로 필요할 수도 있습니다. 자세한 내용은 인덱스 디스크 공간 요구 사항 확인을 참조하십시오.

성능 고려 사항

기존의 비클러스터형 인덱스를 여러 개 포함하는 힙에 클러스터형 인덱스를 만들 때는 RID(행 식별자) 대신 클러스터링 키 값을 포함하도록 모든 비클러스터형 인덱스를 다시 작성해야 합니다. 마찬가지로 비클러스터형 인덱스가 여러 개 있는 테이블에서 클러스터형 인덱스를 삭제하면 DROP 작업의 일부로 비클러스터형 인덱스가 모두 다시 작성됩니다. 대형 테이블에서는 이 작업을 수행하는 데 시간이 오래 걸립니다.

대형 테이블에 인덱스를 만들 경우 클러스터형 인덱스로 시작하고 비클러스터형 인덱스를 작성하는 것이 좋습니다. 기존 테이블에 인덱스를 만들 때는 ONLINE 옵션을 ON으로 설정하는 것이 좋습니다. 이 옵션을 ON으로 설정하면 장기 테이블 잠금이 보유되지 않습니다. 따라서 기본 테이블에 대한 쿼리나 업데이트를 계속할 수 있습니다. 자세한 내용은 온라인으로 인덱스 작업 수행을 참조하십시오.

테이블을 만들 때 PRIMARY KEY 또는 UNIQUE 제약 조건을 만들려면

기존 테이블에 PRIMARY KEY 또는 UNIQUE 제약 조건을 만들려면

인덱스를 만들려면