估计无聚集索引的表的大小
下列步骤可用于估计存储没有聚集索引的表上的数据和任何附加的非聚集索引所需的空间。
对于每个计算,都要指定将在表中出现的行数。表中的行数将对表的大小有直接影响:
表中的行数 = Num_Rows
若要计算存储数据所用的空间,请参见估计表的大小。
记下计算所得的值:
存储数据所用的空间 = Data_Space_Used
下列步骤可用于估计没有聚集索引的表上的单个非聚集索引的大小。
索引键中的列数 = Num_Key_Cols
所有固定长度键列中的字节总和 = Fixed_Key_Size
索引键中的可变长度列数 = Num_Variable_Key_Cols
所有可变长度键列的最大值 = Max_Var_Key_Size
索引空位图 (Index_Null_Bitmap) = 2 + (( Num_Key_Cols + 7) / 8 )
仅使用上述表达式中的整数部分,而去掉其余部分。
可变长度列的总大小 (Variable_Key_Size) = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size
如果没有可变长度列,请将 Variable_Key_Size 设置为 0。
此公式假设所有可变长度键列均百分之百充满。如果预计可变长度键列占用的存储空间比例较低,则可以按照该比例调整结果以对整个索引大小得出一个更准确的估计。
索引行总大小 (Index_Row_Size) = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1 + 8
每页的索引行数 (Index_Rows_Per_Page) = ( 8096 ) / (Index_Row_Size + 2)
由于索引行不能跨页,所以每页的索引行数应向下舍入到最接近的整数。
每叶级页的可用索引行数 (Free_Index_Rows_Per_Page) = 8096 x ((100 - Fill_Factor) / 100) /
Index_Row_Size
计算中使用的填充因子为整数值,而不是百分数。
由于索引行不能跨页,所以每页的索引行数应向下舍入到最接近的整数。
页数(第 0 级) (Num_Pages_Level_0) = Num_Rows / (Index_Rows_Per_Page - Free_Index_Rows_Per_Page)
页数(第 1 级) (Num_Pages_Level_1) = Num_Pages_Level_0 / Index_Rows_Per_Page
重复第二个计算,将从前面的第 n 级中计算的页数除以 Index_Rows_Per_Page,直到指定的第 n (Num_Pages_Level_n) 级页数等于 1(根页)。例如,若要计算第二个索引级别所需的页数:
页数(第 2 级) (Num_Pages_Level_2) = Num_Pages_Level_1 / Index_Rows_Per_Page
对于每一级别,预计的页数应向上舍入到最接近的整数。
汇总存储各索引级别所需页数:
总页数 (Num_Index_Pages) = Num_Pages_Level_0 + Num_Pages_Level_1 +Num_Pages_Level_2 + ...+ Num_Pages_Level_n
非聚集索引大小(字节) = 8192 x Num_Index_Pages
计算表的大小:
表的总大小(字节)= Data_Space_Used + Nonclustered index size + ...n
<!--RELATEDTOPICSLIST-->