비클러스터형 인덱스 구조
비클러스터형 인덱스는 다음의 두 가지 주요 차이점을 제외하고 클러스터형 인덱스와 동일한 B-트리 구조를 갖습니다.
기본 테이블의 데이터 행은 비클러스터형 키 기반의 순서대로 정렬되거나 저장되지 않습니다.
비클러스터형 인덱스의 리프 계층은 데이터 페이지 대신 인덱스 페이지로 구성됩니다.
테이블이나 뷰에 클러스터형 인덱스나 힙과 함께 비클러스터형 인덱스를 정의할 수 있습니다. 비클러스터형 인덱스의 각 인덱스 행에는 비클러스터형 키 값과 행 로케이터가 있습니다. 이 로케이터는 키 값이 포함된 힙이나 클러스터형 인덱스의 데이터 행을 가리킵니다.
비클러스터형 인덱스 행의 행 로케이터는 다음과 같이 행에 대한 포인터이거나 행에 대한 클러스터형 인덱스 키입니다.
테이블이 힙인 경우, 즉 테이블에 클러스터형 인덱스가 없는 경우 행 로케이터는 행에 대한 포인터입니다. 포인터는 파일 ID, 페이지 번호 및 페이지의 행 번호로 구성됩니다. 전체 포인터를 RID(행 ID)라고 합니다.
테이블에 클러스터형 인덱스가 있거나 인덱스가 인덱싱된 뷰에 있는 경우 행 로케이터는 행에 대한 클러스터형 인덱스 키입니다. 클러스터형 인덱스가 고유한 인덱스가 아니면 SQL Server에서는 uniqueifier라는 내부적으로 생성된 값을 추가하여 중복 키를 고유 키로 변경합니다. 이 4바이트 값은 사용자에게는 보이지 않습니다. 비클러스터형 인덱스에서 사용하기 위해 클러스터형 키를 고유한 키로 바꿔야 할 때만 이 값이 추가됩니다. SQL Server는 비클러스터형 인덱스의 리프 행에 저장된 클러스터형 인덱스 키로 클러스터형 인덱스를 찾아 데이터 행을 검색합니다.
비클러스터형 인덱스에는 인덱스에서 사용하는 각 파티션에 대해 index_id > 0의 sys.partitions 행이 하나 있습니다. 기본적으로 비클러스터형 인덱스는 단일 파티션을 사용합니다. 비클러스터형 인덱스가 다중 파티션을 사용하는 경우 각 파티션은 해당 특정 파티션에 대한 인덱스 행을 포함하는 B-트리 구조를 갖습니다. 예를 들어 비클러스터형 인덱스가 4개의 파티션을 사용하면 파티션마다 하나씩 총 4개의 B-트리 구조가 있습니다.
비클러스터형 인덱스의 데이터 형식에 따라 각 비클러스터형 인덱스 구조에는 특정 파티션에 대한 데이터를 저장하고 관리하는 할당 단위가 하나 이상 있습니다. 최소한 각 비클러스터형 인덱스에는 인덱스 B-트리 페이지를 저장하는 파티션당 하나의 IN_ROW_DATA 할당 단위가 있습니다. 또한 비클러스터형 인덱스에는 LOB(Large Object) 열이 포함된 경우 파티션당 하나의 LOB_DATA 할당 단위가 있습니다. 8,060바이트 행 크기 제한을 초과하는 가변 길이 열이 포함된 경우 파티션당 하나의 ROW_OVERFLOW_DATA 할당 단위도 있습니다. 할당 단위에 대한 자세한 내용은 테이블 및 인덱스 구성을 참조하십시오. B-트리에 대한 페이지 컬렉션은 sys.system_internals_allocation_units 시스템 뷰의 root_page 포인터로 고정됩니다.
중요 |
---|
sys.system_internals_allocation_units 시스템 뷰는 Microsoft SQL Server 내부 전용으로 예약되었습니다. 향후 호환성은 보장되지 않습니다. |
다음 그림에서는 단일 파티션의 비클러스터형 인덱스 구조를 보여 줍니다.
포괄 열 인덱스
키가 아닌 열이라는 포괄 열을 추가하여 비클러스터형 인덱스의 기능을 인덱스의 리프 수준으로 확장할 수 있습니다. 키 열은 모든 수준의 비클러스터형 인덱스에 저장되는 반면 키가 아닌 열은 리프 수준에만 저장됩니다. 자세한 내용은 포괄 열이 있는 인덱스를 참조하십시오.