클러스터형 인덱스 구조

SQL Server에서 인덱스는 B-트리로 구성됩니다. 인덱스 B-트리의 각 페이지를 인덱스 노드라고 합니다. B-트리 맨 위 노드를 루트 노드라고 합니다. 인덱스의 최하위 노드를 리프 노드라고 합니다. 루트 노드와 리프 노드 사이의 인덱스 수준을 통틀어 중간 수준이라고 합니다. 클러스터형 인덱스의 리프 노드에는 기본 테이블의 데이터 페이지가 있습니다. 루트 노드와 중간 수준 노드에는 인덱스 행을 포함하는 인덱스 페이지가 있습니다. 각 인덱스 행에는 키 값과 함께 B-트리의 중간 수준 페이지에 대한 포인터나 인덱스 리프 수준의 데이터 행에 대한 포인터가 있습니다. 인덱스의 각 수준의 페이지는 이중 연결 목록에서 연결됩니다.

클러스터형 인덱스에는 인덱스에서 사용하는 각 파티션에 대해 index_id가 1인 sys.partitions 행이 하나 있습니다. 기본적으로 클러스터형 인덱스는 단일 파티션을 사용합니다. 클러스터형 인덱스가 다중 파티션을 사용하는 경우 각 파티션은 해당 특정 파티션에 대한 데이터를 포함하는 B-트리 구조를 갖습니다. 예를 들어 클러스터형 인덱스가 4개의 파티션을 사용하면 파티션마다 하나씩 총 4개의 B-트리 구조가 있습니다.

클러스터형 인덱스의 데이터 형식에 따라 각 클러스터형 인덱스 구조에는 특정 파티션에 대한 데이터를 저장하고 관리하는 할당 단위가 하나 이상 있습니다. 최소한 각 클러스터형 인덱스에는 파티션당 하나의 IN_ROW_DATA 할당 단위가 있습니다. 또한 클러스터형 인덱스에는 LOB(Large Object) 열이 포함된 경우 파티션당 하나의 LOB_DATA 할당 단위가 있습니다. 8,060바이트 행 크기 제한을 초과하는 가변 길이 열이 포함된 경우 파티션당 하나의 ROW_OVERFLOW_DATA 할당 단위도 있습니다. 할당 단위에 대한 자세한 내용은 테이블 및 인덱스 구성을 참조하십시오.

데이터 체인의 페이지와 페이지 행은 클러스터형 인덱스 키의 값에 따라 정렬됩니다. 삽입된 행의 키 값이 기존 행 간의 순서대로 정렬될 때 모든 삽입이 끝납니다. B-트리에 대한 페이지 컬렉션은 sys.system_internals_allocation_units 시스템 뷰의 페이지 포인터로 고정됩니다.

중요 정보중요

sys.system_internals_allocation_units 시스템 뷰는 Microsoft SQL Server 내부 전용으로 예약되었습니다. 향후 호환성은 보장되지 않습니다.

클러스터형 인덱스의 경우 sys.system_internals_allocation_unitsroot_page 열은 특정 파티션에 대한 클러스터형 인덱스의 맨 위를 가리킵니다. SQL Server에서는 인덱스 아래로 이동하여 클러스터형 인덱스 키에 해당하는 행을 찾습니다. 키 범위를 찾을 경우 SQL Server는 인덱스를 탐색하여 범위의 시작 키 값을 찾은 후 이전 또는 다음 포인터를 사용하여 데이터 페이지를 검색합니다. 데이터 페이지 체인에서 첫 페이지를 찾을 경우 SQL Server에서는 인덱스의 루트 노드부터 맨 왼쪽의 포인터를 찾습니다.

이 그림에서는 단일 파티션의 클러스터형 인덱스 구조를 보여 줍니다.

클러스터형 인덱스의 수준