数据类型 大小char/binary 在定义中指定的大小varchar/varbinary 实际的数据大小,使用一个平均估计值int 4字节smallint 2字节tinyint 1字节float 8字节float(b) 4字节(精确到一至七位小数的数字)float(c) 8字节(精确到八至十五位小数的数字)double precision 8字节real 4字节money 8字节small money 4字节datetime 8字节smalldatetime 4字节bit 1字节decimal/numeric 根据精度,2-17字节text/image 每个表行16字节,每个not null列至少加上2KB的页timestamp 8字节允许NULL的列定义为var数据类型数值精度 大小0-9 5字节10-19 9字节20-28 13字节29-38 17字节1.带簇索引表的计算方法数据长度计算方法:.不含可变长度字段的行大小=2+(以字节计算的列的大小的合计值).含可变长度字段的行大小=2+(以字节计算的固定长度列的大小的合计值)+(可变长度列的平均大小的合计值)+(可变长度列的个数+1)+2.一页中的行数=8060/(行的大小)(只舍不入).8KB数据页的数目=(需要的行数)/(每页的行数)(只入不舍)簇索引长度方法:.不含可变长度字段的行大小=5+(以字节计算的列的大小的合计值).含可变长度字段的行大小=5+(以字节计算的固定长度列的大小的合计值)+(可变长度列的平均大小的合计值)+(可变长度列的个数+1)+2.一页中的行数=8060/(行的大小)-2.在N级上的索引页数=(数据页数)/(一页中簇索引行数)(只入不舍)例:有一个表,有一个int型簇索引,估计5,000,000行所需的空间,假定还有四个23字节长的var类型列,且列的平均长度为定义长度的60%。2+4+(92*60%)+(4+1)+2=638060/63=1275000000/127=393715+4=98060/9-2=89439371/894=4545/894=1数据库表所需的8KB页的总数:data page:39371index page(level 1):1index page(level 0):45total number of 8KB pages:39417(or about 308MB)2.带非簇索引表的计算方法.索引行大小=7+(固定长度关键字的长度的合计值).叶子索引行大小=9+(固定长度关键字的长度的合计值)+(可变长度关键字的长度的合计值)+(可变长度关键字的个数)+1.每页的叶子行数=8060/(叶子索引行大小)(只舍不入).叶子页数=(表中的行数)/(每页的叶子行数)(只入不舍).非叶子行大小=叶子索引行大小+4.每页的非叶子索引行数=8060/(非叶子行大小)-2.在N级上的索引页数=(叶子页数)/(每页的非叶子索引行数)(只入不舍)例:有一个表,有一个六字节长的非簇索引,估计5,000,000行所需的空间。7+6=138060/13=6205000000/620=806513+4=178060/17-2=4738065/473=1818/473=1数据表所需的8KB页的总数:leaf page:8065leaf index page(level 1):1leaf index page(level 0):18total number of 8KB pages:8084 or about 64MB
解决方案 »
- 如何判断一批记录【一个材料出库单的一批记录】,肯定包含一个子集【几种材料】的全部记录呢?
- MYSQL的查询
- 几个精典的SQL语法题,进来写写你的答案!
- zjcxc(邹建)老大,来接分.
- 如何结合.Net和SQL2000建立有全文检索功能的Web应用。谢谢
- 急请问 怎么知道表'AA'中是否存在一个约束 ? 如果存在就删除它,再新建一个约束,用SQL语句怎么实现??
- 试题求解
- 【CSDN】【郁闷中,写存储过程写到一半,语法检查说必须声明变量,怎么回事】
- 关于几个条件的查询,急。
- 如何把这样的数据按a,b,c列的顺序合并重复数据,并下一列以上一列为条件,生成合并后的新数据
- 如何将这几个查询放到一条查询语句中,请教高人
- 写个存储过程,给个思路
作者:未知 时间: 2006-7-3 12:29:40 文档类型:未知 来自:未知 浏览统计:101
下列步骤可用于估计存储带有聚集索引的表上的数据和任何附加的非聚集索引所需的空间。 计算存储数据所用的空间。
计算存储聚集索引所用的空间。
计算存储每个附加非聚集索引所用的空间。
汇总计算所得的值。
对于每个计算,都要指定将在表中出现的行数。表中的行数将对表的大小有直接影响:表中的行数 = Num_Rows计算存储数据所用的空间
有关如何计算存储数据所用空间的更多信息,请参见估计表的大小。 记下计算所得的值:存储数据所用的空间 = Data_Space_Used计算存储聚集索引所用的空间
下列步骤可用于估计存储聚集索引所需的空间。 聚集索引定义可以包括固定长度和可变长度列。为了估计聚集索引的大小,需要指定索引行中这两组列的每一组所占用的空间。
索引键中的列数 = Num_CKey_Cols所有固定长度键列中的字节总和 = Fixed_CKey_Size索引键中的可变长度列数 = Num_Variable_CKey_Cols所有可变长度键列的最大值 = Max_Var_CKey_Size如果聚集索引中有固定长度列,那么索引行的一部分将为空位图保留。计算大小:
索引空位图 (CIndex_Null_Bitmap) = 2 + (( Num_CKey_Cols + 7) / 8 )仅使用上述表达式中的整数部分,而去掉其余部分。如果索引中有可变长度列,请确定存储索引行中的这些列需使用的空间:
可变长度列的总大小 (Variable_CKey_Size) = 2 + (Num_Variable_CKey_Cols x 2) + Max_Var_CKey_Size如果没有可变长度列,请将 Variable_CKey_Size 设置为 0。此公式假设所有可变长度键列均百分之百充满。如果预计可变长度键列占用的存储空间比例较低,则可以按照该比例调整结果以对整个索引大小得出一个更准确的估计。计算索引行大小:
索引行总大小 (CIndex_Row_Size) = Fixed_CKey_Size + Variable_CKey_Size + CIndex_Null_Bitmap + 1 + 8下一步,计算每页的索引行数(每页有 8096 个可用字节):
每页的索引行数 (CIndex_Rows_Per_Page) = ( 8096 ) / (CIndex_Row_Size + 2)由于索引行不能跨页,所以每页的索引行数应向下舍入到最接近的整数。下一步,计算存储索引的每一级别的所有索引行所需的页数。
页数(第 0 级)(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_Pages_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计算聚集索引的大小(每页总共有 8192 字节):
聚集索引大小(字节) = 8192 x Num_CIndex_Pages计算存储每个附加非聚集索引所用的空间
下列步骤可用于估计存储每个附加的非聚集索引所需空间量。 非聚集索引定义可以包括固定长度和可变长度列。为了估计非聚集索引的大小,需要计算索引行中这两组列的每一组所占用的空间。
索引键中的列数 = 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。此公式假设所有可变长度键列均百分之百充满。如果预计可变长度键列占用的存储空间比例较低,则可以按照该比例调整结果以对整个索引大小得出一个更准确的估计。计算非叶级索引行大小:
非叶级索引行总大小 (NL_Index_Row_Size) = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1 + 8计算每页的非叶级索引行数:
每页的非叶级索引行数 (NL_Index_Rows_Per_Page) =
( 8096 ) / (NL_Index_Row_Size + 2)由于索引行不能跨页,所以每页的索引行数应向下舍入到最接近的整数。计算叶级索引行大小:
叶级索引行总大小 (Index_Row_Size) = CIndex_Row_Size + Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1最后一个值 1 表示索引行首结构。CIndex_Row_Size 是聚集索引键的索引行总大小。计算每页的叶级索引行数:
每页的叶级索引行数 (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 / NL_Index_Rows_Per_Page重复第二个计算,将从前面的第 n 级中计算的页数除以 NL_Index_Rows_Per_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_n计算非聚集索引的大小:
非聚集索引大小(字节) = 8192 x Num_Index_Pages计算表的大小
计算表的大小: 表的总大小(字节) = Data_Space_Used + Clustered index size + Nonclustered index size + ...n