《估计表的大小(二)--估计带有聚集索引的表的大小》由会员分享,可在线阅读,更多相关《估计表的大小(二)--估计带有聚集索引的表的大小(4页珍藏版)》请在金锄头文库上搜索。
1、估计表的大小(二)估计表的大小(二)-估计带有聚集索引的表的大小估计带有聚集索引的表的大小 估计带有聚集索引的表的大小估计带有聚集索引的表的大小 下列步骤可用于估计存储带有聚集索引的表上的数据和任何附加的非聚集索引所需的空间。1.计算存储数据所用的空间。 2.计算存储聚集索引所用的空间。 3.计算存储每个附加非聚集索引所用的空间。 4.汇总计算所得的值。 对于每个计算,都要指定将在表中出现的行数。表中的行数将对表的大小有直接影响: 表中的行数 = Num_Rows 计算存储数据所用的空间计算存储数据所用的空间 有关如何计算存储数据所用空间的更多信息,请参见估计表的大小。 记下计算所得的值: 存
2、储数据所用的空间 = Data_Space_Used 计算存储聚集索引所用的空间计算存储聚集索引所用的空间 下列步骤可用于估计存储聚集索引所需的空间。 1.聚集索引定义可以包括固定长度和可变长度列。 为了估计聚集索引的大小,需要指定索引行中 这两组列的每一组所占用的空间。 索引键中的列数 = Num_CKey_Cols 所有固定长度键列中的字节总和 = Fixed_CKey_Size 索引键中的可变长度列数 = Num_Variable_CKey_Cols 所有可变长度键列的最大值 = Max_Var_CKey_Size2.如果聚集索引中有固定长度列,那么索引行的 一部分将为空位图保留。计算大
3、小: 索引空位图 (CIndex_Null_Bitmap) = 2 + ( Num_CKey_Cols + 7) / 8 ) 仅使用上述表达式中的整数部分,而去掉其余部分。3.如果索引中有可变长度列,请确定存储索引行 中的这些列需使用的空间: 可变长度列的总大小 (Variable_CKey_Size) = 2 + (Num_Variable_CKey_Cols x 2) + Max_Var_CKey_Size 如果没有可变长度列,请将 Variable_CKey_Size 设 置为 0。 此公式假设所有可变长度键列均百分之百充满。如果 预计可变长度键列占用的存储空间比例较低,则可以 按照该比
4、例调整结果以对整个索引大小得出一个更准 确的估计。4.计算索引行大小: 索引行总大小 (CIndex_Row_Size) = Fixed_CKey_Size + Variable_CKey_Size + CIndex_Null_Bitmap + 1 + 8 5.下一步,计算每页的索引行数(每页有 8096 个可用字节): 每页的索引行数 (CIndex_Rows_Per_Page) = ( 8096 ) / (CIndex_Row_Size + 2)由于索引行不能跨页,所以每页的索引行数应向下舍 入到最接近的整数。6.下一步,计算存储索引的每一级别的所有索引 行所需的页数。 页数(第 0 级)
5、(Num_Pages_CLevel_0) = (Data_Space_Used / 8192) / CIndex_Rows_Per_Page 页数(第 1 级)(Num_Pages_CLevel_1) = Num_Pages_CLevel_0 / CIndex_Rows_Per_Page 重复第二个计算,将从前面的第 n 级中计算的页数 除以 CIndex_Rows_Per_Page,直到指定的第 n (Num_Pages_CLevel_n) 级页数等于 1(索引根页)。 例如,若要计算第二个索引级别所需的页数: 页数(第 2 级) (Num_Pages_CLevel_2) = Num_Pag
6、es_CLevel_1 / CIndex_Rows_Per_Page 对于每一级别,预计的页数应向上舍入到最接近的整 数。 汇总存储各索引级别所需页数: 总页数 (Num_CIndex_Pages) = Num_Pages_CLevel_0 + Num_Pages_CLevel_1 + Num_Pages_CLevel_2 + .+ Num_Pages_CLevel_n 7.计算聚集索引的大小(每页总共有 8192 字节) : 聚集索引大小(字节) = 8192 x Num_CIndex_Pages 计算存储每个附加非聚集索引所用的空间计算存储每个附加非聚集索引所用的空间 下列步骤可用于估计存
7、储每个附加的非聚集索引所需空间量。 1.非聚集索引定义可以包括固定长度和可变长度 列。为了估计非聚集索引的大小,需要计算索 引行中这两组列的每一组所占用的空间。 索引键中的列数 = Num_Key_Cols 所有固定长度键列中的字节总和 = Fixed_Key_Size 索引键中的可变长度列数 = Num_Variable_Key_Cols 所有可变长度键列的最大值 = Max_Var_Key_Size2.如果索引中有固定长度列,那么索引行的一部 分将为空位图保留。计算大小: 索引空位图 (Index_Null_Bitmap) = 2 + ( Num_Key_Cols + 7) / 8 ) 仅
8、使用上述表达式中的整数部分,而去掉其余部分。3.如果索引中有可变长度列,请确定存储索引行 中的这些列需使用的空间: 可变长度列的总大小 (Variable_Key_Size) = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size 如果没有可变长度列,请将 Variable_Key_Size 设 置为 0。 此公式假设所有可变长度键列均百分之百充满。如果 预计可变长度键列占用的存储空间比例较低,则可以 按照该比例调整结果以对整个索引大小得出一个更准 确的估计。4.计算非叶级索引行大小: 非叶级索引行总大小 (NL_Index_Row_Size)
9、 = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1 + 8 5.计算每页的非叶级索引行数: 每页的非叶级索引行数 (NL_Index_Rows_Per_Page) = ( 8096 ) / (NL_Index_Row_Size + 2) 由于索引行不能跨页,所以每页的索引行数应向下舍 入到最接近的整数。6.计算叶级索引行大小: 叶级索引行总大小 (Index_Row_Size) = CIndex_Row_Size + Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitma
10、p + 1 最后一个值 1 表示索引行首结构。CIndex_Row_Size 是聚集索引键的索引行总大小。7.计算每页的叶级索引行数: 每页的叶级索引行数 (Index_Rows_Per_Page) = ( 8096 ) / (Index_Row_Size + 2) 由于索引行不能跨页,所以每页的索引行数应向下舍 入到最接近的整数。8.根据为非聚集索引指定的填充因子,计算每页 保留的可用索引行数。有关更多信息,请参见 填充因子。 每页的可用索引行数 (Free_Index_Rows_Per_Page) = 8096 x (100 - Fill_Factor) / 100) / Index_Ro
11、w_Size 计算中使用的填充因子为整数值,而不是百分数。 由于索引行不能跨页,所以每页的索引行数应向下舍 入到最接近的整数。9.计算存储索引的每一级别的所有索引行所需的 页数: 页数(第 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 / NL_Index_Rows_Per_Page 重复第二个计算,将从前面的第 n 级中计算的页数 除以 NL_Index_Rows_P
12、er_Page,直到指定的第 n (Num_Pages_Level_n) 级页数等于 1(根页)。 例如,若要计算第二个和第三个索引级别所需页数: 数据页数(第 2 级) (Num_Pages_Level_2) = Num_Pages_Level_1 / NL_Index_Rows_Per_Page 数据页数(第 3 级) (Num_Pages_Level_3) = Num_Pages_Level_2 / NL_Index_Rows_Per_Page 对于每一级别,预计的页数应向上舍入到最接近的整 数。 汇总存储各索引级别所需页数: 总页数 (Num_Index_Pages) = Num_Pages_Level_0 + Num_Pages_Level_1 +Num_Pages_Level_2 + .+ Num_Pages_Level_n10.计算非聚集索引的大小: 非聚集索引大小(字节) = 8192 x Num_Index_Pages 计算表的大小计算表的大小 计算表的大小: 表的总大小(字节) = Data_Space_Used + Clustered index size + Nonclustered index size + .n