비클러스터형 인덱스 디자인 지침

비클러스터형 인덱스에는 테이블 데이터의 저장 위치를 가리키는 행 로케이터와 인덱스 키 값이 있습니다. 비클러스터형 인덱스 아키텍처에 대한 자세한 내용은 비클러스터형 인덱스 구조를 참조하십시오.

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

책에서 색인을 사용하는 것처럼 쿼리 최적화 프로그램은 비클러스터형 인덱스를 검색하여 테이블에서 데이터 값의 위치를 찾고 해당 위치에서 데이터를 직접 검색하는 방식으로 데이터 값을 검색합니다. 비클러스터형 인덱스에는 쿼리에서 검색하는 데이터 값에 대한 테이블에서의 정확한 위치를 설명하는 항목이 있기 때문에 정확히 일치하는 값을 찾는 쿼리에는 비클러스터형 인덱스가 가장 적합합니다. 예를 들어 특정 성을 가진 사람에 대해 Person.Person 테이블을 쿼리하기 위해 쿼리 최적화 프로그램이 비클러스터형 인덱스인 IX_Person_LastName_FirstName_MiddleName을 사용할 수 있습니다. 이 인덱스에는 키 열 중 하나로 LastName이 있습니다. 쿼리 최적화 프로그램은 인덱스에서 지정된 LastName과 일치하는 모든 항목을 빠르게 찾을 수 있습니다. 각 인덱스 항목은 해당 데이터를 찾을 수 있는 클러스터형 인덱스나 테이블의 정확한 페이지와 행을 가리킵니다. 쿼리 최적화 프로그램은 인덱스에서 모든 항목을 찾은 후 정확한 페이지와 행으로 직접 이동하여 데이터를 검색할 수 있습니다.

데이터베이스 고려 사항

비클러스터형 인덱스를 디자인할 때 데이터베이스의 특징을 고려해야 합니다.

  • 자주 업데이트하지는 않지만 데이터가 많은 데이터베이스나 테이블의 경우 비클러스터형 인덱스가 많으면 쿼리 성능이 향상될 수 있습니다. 전체 테이블 비클러스터형 인덱스에 비해 인덱스 유지 관리 비용을 줄이고, 인덱스 저장소 비용을 줄이고, 쿼리 성능을 향상시킬 수 있도록 데이터의 잘 정의된 하위 집합에 대한 필터링된 인덱스를 만듭니다.

    읽기 전용 데이터를 주로 포함하는 의사 결정 지원 시스템 응용 프로그램 및 데이터베이스의 경우에도 비클러스터형 인덱스가 많으면 유용할 수 있습니다. 쿼리 최적화 프로그램에서 가장 빠른 액세스 방법을 결정할 때 선택할 수 있는 인덱스가 늘어나며 데이터베이스가 자주 업데이트되지 않으므로 인덱스 유지 관리로 인해 성능이 저하되지 않습니다.

  • 자주 업데이트되는 테이블을 포함하는 온라인 트랜잭션 처리 응용 프로그램 및 데이터베이스의 경우에는 너무 많이 인덱싱하지 않아야 합니다. 또한 인덱스는 가능한 적은 수의 열을 포함하는 좁은 인덱스여야 합니다.

    테이블에 인덱스가 너무 많으면 테이블의 데이터가 변경될 경우 인덱스도 모두 적절하게 조정되어야 하므로 INSERT, UPDATE, DELETE 및 MERGE 문의 성능이 저하될 수 있습니다.

쿼리 고려 사항

비클러스터형 인덱스를 만들기 전에 데이터가 액세스되는 방법을 이해해야 합니다. 다음과 같은 특성이 있는 쿼리의 경우 비클러스터형 인덱스 사용을 고려하십시오.

  • JOIN 또는 GROUP BY 절을 사용하는 쿼리

    조인 및 그룹화 작업과 관련된 열에는 비클러스터형 인덱스를 여러 개 만들고 외래 키 열에는 클러스터형 인덱스를 만듭니다.

  • 큰 결과 집합을 반환하지 않는 쿼리

    대형 테이블에서 행의 잘 정의된 하위 집합을 반환하는 쿼리를 처리하는 필터링된 인덱스를 만듭니다.

  • WHERE 절과 같이 정확히 일치하는 값을 반환하는 쿼리의 검색 조건에 자주 사용되는 열을 포함하는 쿼리

열 고려 사항

비클러스터형 인덱스를 만들 때 열에 대한 다음 특성을 고려하십시오.

  • 쿼리에 사용되는 열 모두 포함

    인덱스에 쿼리의 모든 열이 포함되어 있으면 성능이 향상됩니다. 쿼리 최적화 프로그램이 인덱스에서 모든 열 값을 찾을 수 있으므로 테이블이나 클러스터형 인덱스에 액세스하지 않아 디스크 I/O 작업이 줄어듭니다. 넓은 인덱스 키를 만드는 대신 포괄 열이 있는 인덱스를 사용하여 인덱스 범위에 해당하는 열을 늘립니다. 자세한 내용은 포괄 열이 있는 인덱스를 참조하십시오.

    테이블에 클러스터형 인덱스가 있으면 클러스터형 인덱스에 정의된 열이 자동으로 테이블의 각 비클러스터형 인덱스 끝에 추가됩니다. 이를 통해 비클러스터형 인덱스 정의에 클러스터형 인덱스 열을 지정하지 않고도 쿼리에 사용되는 열이 모두 포함될 수 있습니다. 예를 들어 테이블에 C 열에 대한 클러스터형 인덱스가 있을 경우 B 및 A 열에 대한 비클러스터형 인덱스의 키 값 열은 B, A 및 C가 됩니다.

  • 클러스터형 인덱스가 다른 열에 사용되는 경우 성과 이름의 조합 같은 고유 값 많이 포함

    1과 0만으로 구성되는 경우와 같이 고유 값이 매우 적으면 대개 테이블 검색이 더 효율적이므로 대부분의 쿼리에서 인덱스를 사용하지 않습니다. 이 데이터 형식의 경우 적은 수의 행에서만 발생하는 고유 값에 필터링된 인덱스를 만듭니다. 예를 들어 대부분의 값이 0인 경우 쿼리 최적화 프로그램에서는 1을 포함하는 데이터 행에 대해 필터링된 인덱스를 사용합니다.

인덱스 옵션

비클러스터형 인덱스를 만들 때 지정할 수 있는 몇 가지 인덱스 옵션이 있습니다. 다음 옵션을 특별히 고려해야 합니다.

  • FILLFACTOR

  • ONLINE

자세한 내용은 인덱스 옵션 설정을 참조하십시오.