다음을 통해 공유


비클러스터형 인덱스 만들기

테이블 또는 인덱싱된 뷰에 비클러스터형 인덱스를 여러 개 만들 수 있습니다. 일반적으로 비클러스터형 인덱스는 클러스터형 인덱스를 적용할 수 없고 자주 사용되는 쿼리의 성능을 개선하기 위해 만듭니다.

일반적인 구현 방법

비클러스터형 인덱스는 다음 방법으로 구현합니다.

  • PRIMARY KEY 및 UNIQUE 제약 조건

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

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

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

    기본적으로 클러스터링 옵션을 지정하지 않으면 비클러스터형 인덱스가 생성됩니다. 각 테이블에서 만들 수 있는 최대 비클러스터형 인덱스 수는 999개입니다. 여기에는 PRIMARY KEY 또는 UNIQUE 제약 조건을 사용하여 생성된 인덱스가 포함되지만 XML 인덱스는 포함되지 않습니다.

  • 인덱싱된 뷰의 비클러스터형 인덱스

    뷰에 클러스터형 고유 인덱스를 만든 후 비클러스터형 인덱스를 만들 수 있습니다. 자세한 내용은 인덱싱된 뷰 만들기를 참조하십시오.

포괄 열이 있는 인덱스

쿼리에 사용할 비클러스터형 인덱스를 만들 때 키가 아닌 열을 인덱스 정의에 포함하여 쿼리에서 기본 검색 열로 사용되지 않는 열을 처리할 수 있습니다. 이 경우 쿼리 최적화 프로그램이 테이블이나 클러스터형 인덱스에 액세스하지 않고도 인덱스 내에서 필요한 모든 열 데이터를 찾을 수 있으므로 성능이 향상됩니다. 자세한 내용은 포괄 열이 있는 인덱스를 참조하십시오.

필터 조건자가 있는 인덱스

필터링된 인덱스는 특히 데이터의 잘 정의된 하위 집합에서 선택하는 쿼리를 처리하는 데 적합한 최적화된 비클러스터형 인덱스입니다. 이 인덱스에서는 필터 조건자를 사용하여 테이블의 일부 행을 인덱싱합니다. 잘 디자인된 필터링된 인덱스는 전체 테이블 인덱스에 비해 쿼리 성능을 개선하고 인덱스 유지 관리 비용과 인덱스 저장소 비용을 줄일 수 있습니다.

자세한 내용은 필터링된 인덱스 디자인 지침을 참조하십시오.

디스크 공간 요구 사항

비클러스터형 인덱스의 디스크 공간 요구 사항은 인덱스 디스크 공간 요구 사항 확인을 참조하십시오.

성능 고려 사항

쿼리에 사용되는 모든 열을 인덱스에 포함해야 하지만 열을 불필요하게 추가하지는 말아야 합니다. 인덱스 열(키 열 또는 키가 아닌 열)을 너무 많이 추가하면 다음과 같은 성능 관련 문제가 발생할 수 있습니다.

  • 한 페이지에 들어가는 인덱스 행 수가 줄어들어 디스크 I/O가 늘어나고 캐시 효율성이 저하됩니다.

  • 인덱스를 저장할 디스크 공간이 더 필요합니다.

  • 인덱스 유지 관리로 인해 기본 테이블 또는 인덱싱된 뷰에 대한 수정, 삽입, 업데이트, 삭제 또는 병합 작업에 걸리는 시간이 늘어날 수 있습니다.

데이터 수정 작업 동안 성능이 저하되고 디스크 공간 요구 사항이 증가해도 쿼리의 성능 향상이 중요한지 결정합니다. 쿼리 성능을 평가하는 방법은 쿼리 튜닝을 참조하십시오.

테이블 데이터에 행의 잘 정의된 하위 집합이 포함된 열(예: 스파스 열, 값이 대부분 NULL인 열, 특정 범주의 값이 있는 열 및 특정 범위의 값이 있는 열)이 있는 경우 성능을 개선하려면 필터링된 인덱스를 사용해 보십시오. 자세한 내용은 필터링된 인덱스 디자인 지침을 참조하십시오.

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

CREATE TABLE(Transact-SQL)

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

ALTER TABLE(Transact-SQL)

인덱스를 만들려면

CREATE INDEX(Transact-SQL)