2012-11-28 3 views
1

두 개의 외래 키 열 (CategoryId int, ProductId int)이있는 간단한 매핑 테이블이 있습니다. 기본 키는 두 열에 모두 적용됩니다. 하나 개 이상의 카테고리를 가질 수 있습니다 각각의 제품, 그것은 드문 일이지만클러스터 된 인덱스의 열 순서가 성능에 미치는 영향

혹시 다른 한편으로는, 일반적으로 10,000 + 제품이 더 2보다 카테고리가 있습니다.

기본 키의 열 순서는 성능에 어떤 영향을 줍니까?

테이블의

일반적인 사용은 카테고리 기반으로 한 제품이다 :

SELECT ProductId FROM [table] WHERE CategoryId = @catid 

나는이 클러스터되지 않은 인덱스를한다면, 내가 먼저 CategoryId 위의 쿼리에서 최적의 성능을 얻을하려는 것이라고 이해 . 클러스터 된 인덱스에서도 마찬가지입니까?

답변

3

예, 클러스터 된 인덱스에도 마찬가지입니다. 클러스터링은 행의 실제 순서를 결정합니다. 이와 같이 순차적으로 테이블을 레이아웃하면 랜덤 액세스 대신 고속 순차 I/O를 통해 행과 페이지를 읽을 수 있으므로 대부분의 테이블에서 I/O를 수행 할 수 있습니다.

이 경우 단일 제품의 범주를 가져와야하는 경우 (CategoryId, ProductId)의 클러스터 된 인덱스와 (ProductId, CategoryId)의 클러스터되지 않은 인덱스를 정의 할 수 있습니다. 두 인덱스가 동일한 키를 갖는 방법에 유의하십시오. 매핑 테이블에 2 개의 열만 있으면 두 인덱스의 인덱스 페이지가 똑같은 데이터를 갖게됩니다. 순서가 다르게 정렬됩니다. 행의 다른 데이터를 가져 오기 위해 SQL Server에서 책갈피 조회를 수행 할 필요가 없으므로 클러스터되지 않은 인덱스가 여기서 잘 수행되어야합니다.

관련 문제