2

클러스터되지 않은 인덱스와 마찬가지로 고유하지 않은 열을 클러스터로 정의 할 수 있습니다. 그러나 SQL Server는 열이 고유하다고 정의되지 않은 경우 클러스터 된 인덱스의 경우 인덱스 된 열에 4 바이트 정수를 추가합니다. 두 개 이상의 레코드가 해당 열의 값을 가질지라도 레코드의 "고유성"을 내부적으로 유지하기 위해 수행됩니다. 클러스터되지 않은 인덱스의 경우이 정수가 필요한 이유는 무엇입니까?SQL Server가 고유하지 않은 클러스터 된 인덱스에 4 바이트 정수를 추가하는 이유

답변

6

클러스터되지 않은 인덱스는 이미 클러스터 된 인덱스 열을 포함하므로 상관 관계가있는 정확한 행을 참조 할 수 있습니다. 따라서 클러스터 된 인덱스의 uniquifier를 사용하면 클러스터되지 않은 인덱스에도 uniquifier가 포함됩니다. 여기

좋은 설명 : Understanding and Examining the Uniquifier in SQL Server

+0

그러나 클러스터 된 인덱스가없는 경우에도 클러스터되지 않은 인덱스에는 고유 식별자가 없습니다. – SexyBeast

+2

@Cupidvogel - 힙에있는 NCI의 경우 RID가 포함됩니다. 그것은 독특합니다. SQL Server는 NCI 키가 항상 고유한지 확인합니다. [http://sqlblog.com/blogs/kalen_delaney/archive/2010/03/07/more-about-nonclustered-index-keys.aspx] –

0

나는이 행 로케이터과 관련이있다 생각합니다.

비 클러스터형 인덱스 행의 너비 = 클러스터되지 않은 인덱스 열의 너비 + 클러스터형 인덱스 열 너비 = 열 데이터 형식의 크기 + 열 데이터 형식의 크기.