비클러스터형 인덱스 저장에 필요한 공간의 양을 예측하려면 다음 단계를 수행합니다.
2단계와 3단계에 사용할 변수를 계산합니다.
비클러스터형 인덱스의 리프 수준에 인덱스 정보를 저장하는 데 사용되는 공간을 계산합니다.
비클러스터형 인덱스의 비 리프 수준에 인덱스 정보를 저장하는 데 사용되는 공간을 계산합니다.
계산된 값을 합산합니다.
1단계. 2단계와 3단계에 사용할 변수 계산
다음 단계를 사용하여 인덱스의 상위 수준을 저장하는 데 필요한 공간의 양을 예측하는 데 사용되는 변수를 계산할 수 있습니다.
테이블에 표시할 행 수를 지정합니다.
Num_Rows = 테이블의 행 수
인덱스 키의 고정 길이 및 가변 길이 열 수를 지정하고 이러한 열을 스토리지하는 데 필요한 공간을 계산합니다.
인덱스의 키 열에는 고정 길이 및 가변 길이 열이 포함될 수 있습니다. 내부 수준 인덱스 행 크기를 예측하려면 이러한 각 열 그룹이 인덱스 행 내에서 차지하는 공간을 계산합니다. 열의 크기는 데이터 형식 및 길이 사양에 따라 달라집니다.
Num_Key_Cols = 키 열의 총 수(고정 길이 및 가변 길이)
Fixed_Key_Size = 모든 고정 길이 키 열의 총 바이트 크기
Num_Variable_Key_Cols = 가변 길이 키 열의 수
Max_Var_Key_Size = 모든 가변 길이 키 열의 최대 바이트 크기
인덱스가 특수하지 않은 경우 필요한 데이터 행 로케이터에 대한 계정:
비클러스터형 인덱스가 고유하지 않은 경우 데이터 행 로케이터가 비클러스터형 인덱스 키와 결합되어 모든 행에 고유한 키 값을 생성합니다.
비클러스터형 인덱스가 힙 위에 있는 경우 데이터 행 로케이터는 힙 RID입니다. 크기는 8바이트입니다.
Num_Key_Cols = Num_Key_Cols + 1
= Num_Variable_Key_ColsNum_Variable_Key_Cols + 1
Max_Var_Key_Size = Max_Var_Key_SizeMax_Var_Key_Size + 8
비클러스터형 인덱스가 클러스터형 인덱스에 있는 경우 데이터 행 로케이터는 클러스터링 키입니다. 비클러스터형 인덱스 키와 결합되어야 하는 열은 비클러스터형 인덱스 키 열 집합에 아직 없는 클러스터링 키의 열입니다.
Num_Key_Cols = Num_Key_Cols + 비클러스터형 인덱스 키 열 세트에 없는 클러스터링 키 열의 수 + 1(클러스터형 인덱스가 고유하지 않은 경우)
Fixed_Key_Size = Fixed_Key_Size + 비클러스터형 인덱스 키 열 세트에 없는 고정 길이 클러스터링 키 열의 총 바이트 크기
Num_Variable_Key_Cols = Num_Variable_Key_Cols + 비클러스터형 인덱스 키 열 세트에 없는 가변 길이 클러스터링 키 열의 수 + 1(클러스터형 인덱스가 고유하지 않은 경우)
Max_Var_Key_Size = Max_Var_Key_Size + 비클러스터형 인덱스 키 열 세트에 없는 가변 길이 클러스터링 키 열의 최대 바이트 크기 + 4(클러스터형 인덱스가 고유하지 않은 경우)
행의 Null 비트맵 부분은 열의 Null 허용 여부 관리를 위해 예약될 수 있습니다. 다음과 같이 이 부분의 크기를 계산합니다.
인덱스 키에 null 허용 열이 있는 경우(1.3단계에서 설명한 필요 클러스터링 키 열 포함), 인덱스 행의 일부는 null 비트맵을 위해 예약됩니다.
Index_Null_Bitmap = 2 + ((인덱스 행의 열 수 + 7) / 8)
위 식의 정수 부분만 사용하고 나머지를 삭제합니다.
Null을 허용하는 키 열이 없으면 Index_Null_Bitmap을 0으로 설정합니다.
가변 길이 데이터 크기를 계산합니다.
필요한 클러스터링 인덱스 키 열을 포함하여 인덱스에 가변 길이 열이 있는 경우에는 해당 인덱스 행 안에 열을 저장하는 데 사용되는 공간을 결정합니다.
Variable_Key_Size = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size
Max_Var_Key_Size에 추가된 바이트는 각 변수 열을 추적하기 위한 것입니다. 이 수식에서는 모든 가변 길이 열이 100% 채워진 것으로 가정합니다. 사용할 가변 길이 열 스토리지 공간 비율이 더 적을 것으로 예상되는 경우 해당 비율로 Max_Var_Key_Size 값을 조정하여 전체 테이블 크기를 보다 정확하게 예측할 수 있습니다.
가변 길이 열이 없는 경우에는 Variable_Key_Size를 0으로 설정합니다.
인덱스 행 크기를 계산합니다.
Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1(인덱스 행의 행 머리글 오버헤드) + 6(자식 페이지 ID 포인터)
페이지당 인덱스 행 수를 계산합니다. 페이지당 사용 가능한 바이트 수는 8,096바이트입니다.
Index_Rows_Per_Page = 8096 / (Index_Row_Size + 2)
인덱스 행은 여러 페이지에 걸쳐 배치되지 않으므로, 페이지당 인덱스 행 수는 가장 가까운 정수로 버림해야 합니다. 수식에서 값 2는 페이지의 슬롯 배열에서 행의 입력을 위한 것입니다.
2단계. 리프 레벨에서 인덱스 정보를 저장하는 데 사용되는 공간 계산
다음 단계를 통해 인덱스의 리프 레벨을 저장하는데 필요한 공간을 추정할 수 있습니다. 이 단계를 완료하려면 1단계에서 보관된 값이 필요합니다.
리프 수준에서 고정 길이와 가변 길이 열의 수를 지정하고, 이들의 저장에 필요한 공간을 계산합니다.
비고
인덱스 키 열 외에도 키가 아닌 열을 포함하여 비클러스터형 인덱스를 확장할 수 있습니다. 이러한 추가 열은 비클러스터형 인덱스의 리프 레벨에만 저장됩니다. 자세한 내용은 Create Indexes with Included Columns을 참조하세요.
비고
정의된 총 테이블 너비가 8,060바이트를 초과하는 열을 결합
varcharnvarcharvarbinarysql_variant할 수 있습니다. 각 열의 길이는varchar,varbinary,sql_variant열의 경우 8,000바이트 이내, 그리고nvarchar열의 경우 4,000바이트 이내여야 합니다. 그러나 결합된 너비는 테이블의 8,060 바이트 제한을 초과할 수 있습니다. 열이 포함된 비클러스터형 인덱스 리프 행에도 적용됩니다.비클러스터형 인덱스에 포함된 열이 없는 경우 1.3단계에서 결정된 수정 내용을 포함하여 1단계의 값을 사용합니다.
Num_Leaf_Cols = Num_Key_Cols
고정_리프_크기 = 고정_키_크기
Num_Variable_Leaf_Cols = Num_Variable_Key_Cols
Max_Var_Leaf_Size = Max_Var_Key_Size
비클러스터형 인덱스에 열이 포함된 경우 1.3단계의 수정 내용을 포함하여 1단계의 값에 적절한 값을 추가합니다. 열의 크기는 데이터 형식 및 길이 사양에 따라 달라집니다. 자세한 내용은 데이터 형식(Transact-SQL)을 참조하세요.
Num_Leaf_Cols = Num_Key_Cols + 포괄 열의 수
Fixed_Leaf_Size = Fixed_Key_Size + 고정 길이 포함 열의 총 바이트 크기
Num_Variable_Leaf_Cols = Num_Variable_Key_Cols + 가변 길이의 포함된 열의 수
Max_Var_Leaf_Size = Max_Var_Key_Size + 가변 길이 포괄 열의 최대 바이트 크기
데이터 행 로케이터를 고려하십시오.
비클러스터형 인덱스가 고유하지 않은 경우 데이터 행 로케이터의 오버헤드는 1.3단계에서 이미 고려되어 추가적인 수정이 필요하지 않습니다. 다음 단계로 이동합니다.
비클러스터형 인덱스가 고유한 경우 데이터 행 로케이터는 리프 레벨의 모든 행에서 고려해야 합니다.
비클러스터형 인덱스가 힙 위에 있는 경우 데이터 행 로케이터는 힙 RID(크기 8바이트)입니다.
Num_Leaf_Cols = Num_Leaf_Cols + 1
변수_리프_열_갯수 = 변수_리프_열_갯수 + 1
= Max_Var_Leaf_SizeMax_Var_Leaf_Size + 8
비클러스터형 인덱스가 클러스터형 인덱스에 있는 경우 데이터 행 로케이터는 클러스터링 키입니다. 비클러스터형 인덱스 키와 결합되어야 하는 열은 비클러스터형 인덱스 키 열 집합에 아직 없는 클러스터링 키의 열입니다.
Num_Leaf_Cols = Num_Leaf_Cols + 비클러스터형 인덱스 키 열 세트에 없는 클러스터링 키 열의 수 + 1(클러스터형 인덱스가 고유하지 않은 경우)
Fixed_Leaf_Size = Fixed_Leaf_Size + 비클러스터형 인덱스 키 열 세트에 없는 고정 길이 클러스터링 키 열의 수
Num_Variable_Leaf_Cols = Num_Variable_Leaf_Cols + 비클러스터형 인덱스 키 열 세트에 없는 가변 길이 클러스터링 키 열의 수 + 1(클러스터형 인덱스가 고유하지 않은 경우)
Max_Var_Leaf_Size = Max_Var_Leaf_Size + 비클러스터형 인덱스 키 열 세트에 없는 가변 길이 클러스터링 키 열의 바이트 크기 + 4(클러스터형 인덱스가 고유하지 않은 경우)
Null 비트맵 크기를 계산합니다.
Leaf_Null_Bitmap = 2 + ((Num_Leaf_Cols + 7) / 8)
위 식의 정수 부분만 사용하고 나머지를 삭제합니다.
가변 길이 데이터 크기를 계산합니다.
2.2단계에서 설명한 대로 필요한 클러스터링 키 열을 포함하여 인덱스 키에 가변 길이 열이 있는 경우 인덱스 행 내에 열을 저장하는 데 사용되는 공간을 결정합니다.
Variable_Leaf_Size = 2 + (Num_Variable_Leaf_Cols x 2) + Max_Var_Leaf_Size
Max_Var_Key_Size에 추가된 바이트는 각 변수 열을 추적하기 위한 것입니다. 이 수식에서는 모든 가변 길이 열이 100% 채워진 것으로 가정합니다. 사용할 가변 길이 열 스토리지 공간 비율이 더 적을 것으로 예상되는 경우 해당 비율로 Max_Var_Leaf_Size 값을 조정하여 전체 테이블 크기를 보다 정확하게 예측할 수 있습니다.
가변 길이 열이 없으면 Variable_Leaf_Size 0으로 설정합니다.
인덱스 행 크기를 계산합니다.
Leaf_Row_Size = Fixed_Leaf_Size + Variable_Leaf_Size + Leaf_Null_Bitmap + 1 (인덱스 행의 행 머리글 오버헤드) + 6 (자식 페이지 ID 포인터의 경우)
페이지당 인덱스 행 수를 계산합니다. 페이지당 사용 가능한 바이트 수는 8,096바이트입니다.
Leaf_Rows_Per_Page = 8096 / (Leaf_Row_Size + 2)
인덱스 행은 여러 페이지에 걸쳐 배치되지 않으므로, 페이지당 인덱스 행 수는 가장 가까운 정수로 버림해야 합니다. 수식에서 값 2는 페이지의 슬롯 배열에서 행의 입력을 위한 것입니다.
지정한 채우기 비율에 따라 페이지당 예약된 여유 행 수를 계산합니다.
Free_Rows_Per_Page = 8096 x ((100 - Fill_Factor) / 100) / (Leaf_Row_Size + 2)
계산에 사용되는 채우기 비율은 백분율이 아닌 정수 값입니다. 행이 여러 페이지에 걸쳐 배치되지 않으므로 페이지당 행 수는 가장 가까운 정수로 내림하여 사용해야 합니다. 채우기 비율이 클수록 각 페이지에 더 많은 데이터가 저장되고 페이지 수는 줄어듭니다. 수식에서 값 2는 페이지의 슬롯 배열에서 행의 입력을 위한 것입니다.
모든 행을 저장하는 데 필요한 페이지 수를 계산합니다.
Num_Leaf_Pages = Num_Rows / (Leaf_Rows_Per_Page - Free_Rows_Per_Page)
예상 페이지 수는 가장 가까운 전체 페이지로 반올림되어야 합니다.
인덱스 크기를 계산합니다. 페이지당 총 바이트 수는 8,192바이트입니다.
Leaf_Space_Used = 8192 x Num_Leaf_Pages
3단계. 비 리프 레벨에서 인덱스 정보를 저장하는 데 사용되는 공간을 계산
다음 단계에 따라 인덱스의 중간 및 루트 수준을 저장하는 데 필요한 공간의 양을 예측합니다. 이 단계를 완료하려면 2단계와 3단계에서 보관된 값이 필요합니다.
인덱스에서 비리프 레벨의 수를 계산합니다.
리프가 아닌 수준 = 1 + 로그 Index_Rows_Per_Page(Num_Leaf_Pages / Index_Rows_Per_Page)
이 값을 가장 가까운 정수로 반올림합니다. 비클러스터형 인덱스의 리프 수준은 이 값에 포함되지 않습니다.
인덱스의 비-리프 페이지 수를 계산합니다.
Num_Index_Pages = ∑레벨(Num_Leaf_Pages/Index_Rows_Per_Page레벨)여기서 1 <= 레벨 <= 레벨
각 항을 가장 근접한 정수로 반올림합니다. 간단한 예로 Num_Leaf_Pages = 1000 및 Index_Rows_Per_Page = 25인 인덱스를 고려합니다. 리프 수준 위 첫 번째 인덱스 수준에 인덱스 행이 1000개 저장되고 리프 페이지당 인덱스 행 1개씩, 각 페이지마다 인덱스 행 25개가 들어갈 수 있습니다. 즉 인덱스 행을 1000개 저장하려면 40 페이지가 필요합니다. 인덱스의 다음 수준에서는 40개 행을 저장해야 하므로 즉, 2페이지가 필요합니다. 인덱스의 최종 수준에서는 2개 행을 저장해야 하므로 즉, 1페이지가 필요합니다. 이렇게 하면 비 리프 인덱스 페이지가 43개 생성됩니다. 앞의 수식에 이 숫자들을 사용하면 다음 결과가 나옵니다.
비-리프_레벨 = 1 + log25 (1000 / 25) = 3
Num_Index_Pages = 1000/(253)+ 1000/(252) + 1000/(251) = 1 + 2 + 40 = 43으로, 예제에 설명된 페이지 수입니다.
인덱스 크기를 계산합니다. 페이지당 총 바이트 수는 8,192바이트입니다.
사용된_인덱스_공간 = 8192 x Num_Index_Pages
4단계. 계산된 값을 합산합니다
이전 두 단계에서 얻은 값의 합계:
비클러스터형 인덱스 크기(바이트) = Leaf_Space_Used + Index_Space_used
이 계산에서는 다음을 고려하지 않습니다.
분할
분할로 인한 공간 오버헤드는 최소화되지만 계산하기 복잡합니다. 포함하는 것은 중요하지 않습니다.
할당 페이지
힙에 할당된 페이지를 추적하는 데 사용되는 IAM 페이지가 하나 이상 있지만 공간 오버헤드는 최소화되며 사용되는 IAM 페이지 수를 정확하게 계산하는 알고리즘은 없습니다.
LOB(대용량 개체) 값
LOB 데이터 형식
varchar(max),varbinary(max),nvarchar(max),text,ntext,xml,image값을 저장하는 데 사용할 공간을 정확하게 결정하는 알고리즘은 복잡합니다. 필요한 LOB 값의 평균 크기를 더하고 Num_Rows를 곱한 다음 총 비클러스터형 인덱스 크기에 추가하면 됩니다.압축
압축된 인덱스의 크기를 미리 계산할 수 없습니다.
희소 열
스파스 열의 스페이스 요구 사항에 대해 자세한 정보는 스파스 열 사용을 참조하세요.
또한 참조하십시오
클러스터형 및 비클러스터형 인덱스 소개
비클러스터형 인덱스 만들기
클러스터형 인덱스 만들기
테이블 크기 예측
클러스터형 인덱스의 크기 예측
힙 크기 추정
데이터베이스 크기 예측