--得到數據庫中所有表的空間/記錄情況
exec sp_MSForEachTable
@precommand=N '
create table ##(
id int identity,
表名 sysname,
字段數 int,
記錄數 int,
保留空間 Nvarchar(10),
使用空間 varchar(10),
索引使用空間 varchar(10),
未用空間 varchar(10)) ',
@command1=N 'insert ##(表名,記錄數,保留空間,使用空間,索引使用空間,未用空間) exec sp_spaceused ' '? ' '
update ## set 字段數=(select count(*) from syscolumns where id=object_id( ' '? ' ')) where id=scope_identity() ',
@postcommand=N 'select * from ## order by id drop table ## '
以使用下列步驟估計在表中存儲數據所需的空間:
1. 按照估計堆的大小或估計聚集索引的大小中的說(shuō)明計算堆或聚集索引所需的空間。
2. 對于每個(gè)非聚集索引,按照估計非聚集索引的大小中的說(shuō)明計算其所需的空間。
3. 對步驟 1 和步驟 2 中計算的值求和。
1.1 估計堆的大小
可以使用以下步驟估計在堆中存儲數據所需的空間量:
指定表中顯示的行數:
Num_Rows = 表中的行數
指定固定長(cháng)度和可變長(cháng)度列的數量,并計算存儲所需的空間:
計算每組列在數據行中所占據的空間。列的大小取決于數據類(lèi)型和長(cháng)度說(shuō)明。有關(guān)詳細信息,請參閱 數據類(lèi)型(數據庫引擎)。
Num_Cols = 總列數(固定長(cháng)度和可變長(cháng)度)
Fixed_Data_Size = 所有固定長(cháng)度列的總字節大小
Num_Variable_Cols = 可變長(cháng)度列的數量
Max_Var_Size = 所有可變長(cháng)度列的最大字節大小
保留行中稱(chēng)為空位圖的部分以管理列的為空性。計算大?。?
Null_Bitmap = 2 + ((Num_Cols + 7) / 8)
只應使用該表達式的整數部分。而去掉其余部分。
計算可變長(cháng)度數據的大?。?
如果表中有可變長(cháng)度列,請確定在行中存儲這些列需使用的空間:
Variable_Data_Size = 2 + (Num_Variable_Cols x 2) + Max_Var_Size
此公式假設所有可變長(cháng)度列均百分之百充滿(mǎn)。如果預計可變長(cháng)度列占用的存儲空間比例較低,則可以按照該比例調整 Max_Var_Size 值,從而對整個(gè)表大小得出一個(gè)更準確的估計。
如果沒(méi)有可變長(cháng)度列,請將 Variable_Data_Size 設置為 0。
計算總的行大?。?
Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4
公式中的值 4 是數據行的行標題開(kāi)銷(xiāo)。
下一步,計算每頁(yè)的行數(每頁(yè)有 8096 可用字節):
Rows_Per_Page = 8096 / (Row_Size + 2)
因為行不跨頁(yè),所以每頁(yè)的行數應向下舍入到最接近的整數。 公式中的數值 2 是計算行數時(shí)引入的行大小余量。
計算存儲所有行所需的頁(yè)數:
Num_Pages = Num_Rows / Rows_Per_Page
估計的頁(yè)數應向上舍入到最接近的整數。
計算在堆中存儲數據所需的空間量(每頁(yè)的總字節為 8192):
堆大?。ㄗ止潱? 8192 x Num_Pages
此計算不考慮以下因素:
分區
分區的空間開(kāi)銷(xiāo)很小,但是計算復雜。是否包括它并不重要。
分配頁(yè)
至少有一個(gè) IAM 頁(yè)用于跟蹤為堆分配的頁(yè),但是空間開(kāi)銷(xiāo)很小,并且沒(méi)有算法可以精確地計算出要使用的 IAM 頁(yè)數。
大型對象 (LOB) 值
具體確定需要多少空間來(lái)存儲 LOB 數據類(lèi)型(varchar(max)、varbinary(max)、nvarchar(max)、text、ntext xml 和 image)值的算法是復雜的。只添加所期望的 LOB 值的平均大小就足夠了,然后將其添加至總的堆大小中。
1.2 估計聚集索引的大小
您可以使用下列步驟估計存儲聚集索引中的數據所需的空間大?。?
計算存儲聚集索引葉級數據所用的空間。
計算存儲聚集索引的索引信息所用的空間。
對計算出的值求和。
步驟1. 計算在葉級別存儲數據所用的空間
指定表中顯示的行數:
Num_Rows = 表中的行數
指定固定長(cháng)度和可變長(cháng)度列的數量,并計算存儲所需的空間:
計算每組列在數據行中所占據的空間。列的大小取決于數據類(lèi)型和長(cháng)度規定。有關(guān)詳細信息,請參閱數據類(lèi)型(數據庫引擎)。
Num_Cols = 總列數(固定長(cháng)度和可變長(cháng)度)
Fixed_Data_Size = 所有固定長(cháng)度列的總字節大小
Num_Variable_Cols = 可變長(cháng)度列的數量
Max_Var_Size = 所有可變長(cháng)度列的最大字節大小
如果聚集索引不唯一,則請說(shuō)明“唯一標識符”列:
唯一標識符是可為空的可變長(cháng)度列。在具有非唯一鍵值的行中,它非空而且大小為 4 個(gè)字節。此值是索引鍵的一部分,用于確保每一行都具有唯一的鍵值。
Num_Cols = Num_Cols + 1
Num_Variable_Cols = Num_Variable_Cols + 1
Max_Var_Size = Max_Var_Size + 4
這些修改假定所有值都不是唯一的。
保留行中稱(chēng)為空位圖的部分以管理列的為空性。計算大?。?
Null_Bitmap = 2 + ((Num_Cols + 7) / 8)
僅使用上述表達式中的整數部分,而放棄所有余數。
計算可變長(cháng)度數據的大?。?
如果表中有可變長(cháng)度列,請確定在行中存儲這些列需使用的空間:
Variable_Data_Size = 2 + (Num_Variable_Cols x 2) + Max_Var_Size
此公式假設所有可變長(cháng)度列均百分之百填充。如果預計可變長(cháng)度列占用的存儲空間比例較低,則可以按照該比例調整 Max_Var_Size 值,從而對整個(gè)表大小得出一個(gè)更準確的估計。
注意:
SQL Server 2005 引入了組合 varchar、nvarchar、varbinary 或 sql_variant 列的功能,這些列使定義的表的總寬度超過(guò) 8,060 字節。對于 varchar、varbinary 或 sql_variant 中的每一列,其長(cháng)度不能超過(guò) 8,000 字節,對于 nvarchar 列,不能超過(guò) 4,000 字節。但是,表中這些列的組合寬度可超過(guò) 8,060 字節。有關(guān)詳細信息,請參閱行溢出數據超過(guò) 8 KB。
如果沒(méi)有可變長(cháng)度列,請將 Variable_Data_Size 設置為 0。
計算總的行大?。?
Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4
值 4 是數據行的行標題的開(kāi)銷(xiāo)。
下一步,計算每頁(yè)的行數(每頁(yè)有 8096 個(gè)可用字節):
Rows_Per_Page = 8096 / (Row_Size + 2)
因為行不能跨頁(yè),所以每頁(yè)的行數應向下舍入到最接近的整數。公式中的值 2 是計算行數時(shí)引入的行大小余量。
根據指定的填充因子計算每頁(yè)保留的空行數:
Free_Rows_Per_Page = 8096 x ((100 - Fill_Factor) / 100) / (Row_Size + 2)
計算中使用的填充因子為整數值,而不是百分比。因為行不能跨頁(yè),所以每頁(yè)的行數應向下舍入到最接近的整數。填充因子增大時(shí),每頁(yè)將存儲更多的數據,因此頁(yè)數將減少。公式中的值 2 是計算行數時(shí)引入的行大小余量。
計算存儲所有行所需的頁(yè)數:
Num_Pages = Num_Rows / (Rows_Per_Page - Free_Rows_Per_Page)
估計的頁(yè)數應向上舍入到最接近的整數。
計算在葉級別中存儲數據所需的空間大?。宽?yè)共有 8192 個(gè)字節):
Leaf_space_used = 8192 x Num_Pages
步驟 2. 計算存儲索引信息所用的空間
您可以使用下列步驟估計存儲索引的較高級別所需的空間大?。?
指定索引鍵中固定長(cháng)度和可變長(cháng)度列的數量,并計算存儲所需的空間:
索引鍵列可以包括固定長(cháng)度和可變長(cháng)度列。若要估計內部級別索引行的大小,請計算每組列在索引行中所占據的空間。列的大小取決于數據類(lèi)型和長(cháng)度規定。有關(guān)詳細信息,請參閱數據類(lèi)型(數據庫引擎)。
Num_Key_Cols = 總鍵列數(固定長(cháng)度和可變長(cháng)度)
Fixed_Key_Size = 所有固定長(cháng)度鍵列的總字節大小
Num_Variable_Key_Cols = 可變長(cháng)度鍵列的數量
Max_Var_Key_Size = 所有可變長(cháng)度鍵列的最大字節大小
如果索引不唯一,則請說(shuō)明所需的任意唯一標識符:
唯一標識符是可為空的可變長(cháng)度列。它將是非空的,在具有非唯一索引鍵值的行中的大小是 4 個(gè)字節。此值是索引鍵的一部分,用于確保每一行都具有唯一的鍵值。
Num_Key_Cols = Num_Key_Cols + 1
Num_Variable_Key_Cols = Num_Variable_Key_Cols + 1
Max_Var_Key_Size = Max_Var_Key_Size + 4
這些修改假定所有值都不是唯一的。
計算空位圖大?。?
如果索引鍵中有允許為空的列,則索引行的一部分將為空位圖保留。計算大?。?
Index_Null_Bitmap = 2 + ((可為空的鍵列數 + 7) / 8)
僅使用上述表達式中的整數部分,而放棄所有余數。
如果沒(méi)有可為空的鍵列,請將 Index_Null_Bitmap 設置為 0。
計算可變長(cháng)度數據的大?。?
如果索引中有可變長(cháng)度列,請確定在索引行中存儲這些列需使用的空間:
Variable_Key_Size = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size
此公式假設所有可變長(cháng)度列均百分之百填充。如果預計可變長(cháng)度列占用的存儲空間比例較低,則可以按照該比例調整 Max_Var_Key_Size 值,從而對整個(gè)表大小得出一個(gè)更準確的估計。
如果沒(méi)有可變長(cháng)度列,請將 Variable_Key_Size 設置為 0。
計算索引行大?。?
Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1(對應于索引行的行標題開(kāi)銷(xiāo))+ 6(對應于子頁(yè) ID 指針)
下一步,計算每頁(yè)的索引行數(每頁(yè)有 8096 個(gè)可用字節):
Index_Rows_Per_Page = 8096 / (Index_Row_Size + 2)
因為索引行不能跨頁(yè),所以每頁(yè)的索引行數應向下舍入到最接近的整數。公式中的數值 2 是計算行數時(shí)引入的行大小余量。
計算索引中的級別數:
Levels = 1 + log Index_Rows_Per_Page (Num_Rows / Index_Rows_Per_Page)
注意:該值不包括聚集索引的葉級別。
計算索引中的頁(yè)數:
Num_Index_Pages = Level (Index_Rows_Per_Page)Level – 1
其中,1 <= Level <= Levels
這是一個(gè)簡(jiǎn)單的示例,所討論的索引在葉以上的級別共需要 1000 個(gè)索引行,每頁(yè)容納 10 個(gè)索引行。這意味著(zhù)存儲這 1000 行需要 100 頁(yè)。下一級索引必須存儲 100 行。這意味著(zhù)需要 10 頁(yè)。最后一級索引必須存儲 10 行。這意味著(zhù)需要 1 頁(yè)。如果將這些數代入前面的公式中,結果如下:
Height = 1 + log10 (1000 / 10) = 3
Num_Index_Pages = (10)3-1 + (10)2-1 + (10)1-1 = 111,這是示例中所述的頁(yè)數。
計算索引的大?。宽?yè)共有 8192 個(gè)字節):
Index_Space_Used = 8192 x Num_Index_Pages
步驟 3. 對計算出的值求和
對從前面兩個(gè)步驟中得到的值求和:
聚集索引大?。ㄗ止潱? Leaf_Space_Used + Index_Space_used
此計算不考慮以下因素:
分區
分區的空間開(kāi)銷(xiāo)很小,但是計算復雜。是否包括它并不重要。
分配頁(yè)
至少有一個(gè) IAM 頁(yè)用于跟蹤為堆分配的頁(yè),但是空間開(kāi)銷(xiāo)很小,并且沒(méi)有算法可以精確地計算出要使用的 IAM 頁(yè)數。
大型對象 (LOB) 值
精確確定存儲 LOB 數據類(lèi)型 varchar(max)、varbinary(max)、nvarchar(max)、text、ntext、xml 和 image 值所用的空間量的算法非常復雜。只需加上所期望的 LOB 值的平均大小、再乘以 Num_Rows,然后再加上聚集索引的總大小。
2 對于每個(gè)非聚集索引,按照估計非聚集索引的大小中的說(shuō)明計算其所需的空間
可使用下列步驟估計存儲非聚集索引所需的空間大?。?
計算用于存儲非聚集索引的非葉級中的索引信息的空間。
計算用于存儲非聚集索引的葉級中的索引信息的空間。
對計算出的值求和。
步驟 1. 計算用于存儲非葉級中的索引信息的空間
重要事項:
保留在此步驟中使用的值,以便在步驟 2 中使用。
可使用下列步驟估計存儲索引的較高級別所需的空間大小。
指定表中顯示的行數:
Num_Rows = 表中的行數
指定索引鍵中固定長(cháng)度和可變長(cháng)度列的數量,并計算存儲所需的空間:
索引鍵列可以包括固定長(cháng)度和可變長(cháng)度列。若要估計內部級別索引行的大小,請計算每組列在索引行中所占據的空間。列的大小取決于數據類(lèi)型和長(cháng)度規定。有關(guān)詳細信息,請參閱數據類(lèi)型(數據庫引擎)。
Num_Key_Cols = 總鍵列數(固定長(cháng)度和可變長(cháng)度)
Fixed_Key_Size = 所有固定長(cháng)度鍵列的總字節大小
Num_Variable_Key_Cols = 可變長(cháng)度鍵列的數量
Max_Var_Key_Size = 所有可變長(cháng)度鍵列的最大字節大小
如果索引不是唯一的,對所需的數據行定位符說(shuō)明如下:
如果非聚集索引不是唯一的,數據行定位符將與非聚集索引鍵組合使用,以便為每一行生成唯一的鍵值。
如果非聚集索引在堆上,則數據行定位符是堆 RID。其大小是 8 個(gè)字節。
Num_Key_Cols = Num_Key_Cols + 1
Num_Variable_Key_Cols = Num_Variable_Key_Cols + 1
Max_Var_Key_Size = Max_Var_Key_Size + 8
如果非聚集索引在聚集索引之上,則數據行定位符是聚集鍵。必須與非聚集索引鍵結合使用的列是聚集鍵中的以下列:不在非聚集索引鍵列集中的列。
Num_Key_Cols = Num_Key_Cols + 不在非聚集索引鍵列集中的聚集鍵列數(如果聚集索引不唯一,則 + 1)
Fixed_Key_Size = Fixed_Key_Size + 不在非聚集索引鍵列集中的固定長(cháng)度聚集鍵列的總字節大小
Num_Variable_Key_Cols = Num_Variable_Key_Cols + 不在非聚集索引鍵列集中的可變長(cháng)度聚集鍵列數(如果聚集索引不唯一,則 + 1)
Max_Var_Key_Size = Max_Var_Key_Size + 不在非聚集索引鍵列集中的可變長(cháng)度聚集鍵列的最大字節大?。ㄈ绻奂饕晃ㄒ?,則 + 4)
可以保留行的一部分(稱(chēng)為“空位圖”),以管理列的為空性。計算大?。?
如果索引鍵中有可為空的列(包括步驟 1.3 中所述的所有必要的聚集鍵列),則保留索引行的一部分,以用于空位圖。
Index_Null_Bitmap = 2 + ((可以為空的鍵列數 + 7) / 8)
僅使用上述表達式中的整數部分,而放棄所有余數。
如果沒(méi)有可為空的鍵列,請將 Index_Null_Bitmap 設置為 0。
計算可變長(cháng)度數據大?。?
如果索引鍵中有可變長(cháng)度的列(包括所有必要的聚集索引鍵列),請確定存儲索引行中的這些列需使用的空間:
Variable_Key_Size = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size
此公式假設所有可變長(cháng)度列均百分之百填充。如果預計可變長(cháng)度列占用的存儲空間比例較低,則可以按照該比例調整 Max_Var_Key_Size 值,從而對整個(gè)表大小得出一個(gè)更準確的估計。
如果沒(méi)有可變長(cháng)度列,請將 Variable_Key_Size 設置為 0。
計算索引行大?。?
Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1(對應于索引行的行標題開(kāi)銷(xiāo))+ 6(對應于子頁(yè) ID 指針)
下一步,計算每頁(yè)的索引行數(每頁(yè)有 8096 個(gè)可用字節):
Index_Rows_Per_Page = 8096 / (Index_Row_Size + 2)
因為索引行不能跨頁(yè),所以每頁(yè)的索引行數應向下舍入到最接近的整數。公式中的數值 2 是計算行數時(shí)引入的行大小余量。
計算索引中的級別數:
Levels = 1 + log Index_Rows_Per_Page (Num_Rows / Index_Rows_Per_Page)
請注意,此值不包括葉級非聚集索引。
計算索引中的頁(yè)數:
Num_Index_Pages = Level (Index_Rows_Per_Page)Level – 1
其中,1 <= Level <= Levels
作為一個(gè)簡(jiǎn)單示例,請考慮這樣的索引:其中葉級以上的級別所需總索引行數是 1000,且每頁(yè)可容納 10 個(gè)索引行。這意味著(zhù)存儲這 1000 行需要 100 頁(yè)。下一級索引必須存儲 100 行。這意味著(zhù)需要 10 頁(yè)。最后一級索引必須存儲 10 行。這意味著(zhù)需要 1 頁(yè)。使用這些以前的公式中的數字可得到下列結果:
Height = 1 + log10 (1000 / 10) = 3
Num_Index_Pages = (10)3-1 + (10)2-1 + (10)1-1 = 111,這是示例中所述的頁(yè)數。
計算聚集索引的大?。宽?yè)總共有 8192 個(gè)字節):
Index_Space_Used = 8192 x Num_Index_Pages
步驟 2. 計算用于存儲葉級中的索引信息的空間
可使用下列步驟估計存儲葉級索引所需的空間大小。需要使用從步驟 1 中保留的值來(lái)完成此步驟。
指定葉級的固定長(cháng)度列和可變長(cháng)度列的數量,并計算存儲這些列所需的空間:
注意:
SQL Server 2005 通過(guò)包括索引鍵列和非鍵列引入了擴展非聚集索引的功能。這些額外的列只存儲在葉級非聚集索引。有關(guān)詳細信息,請參閱創(chuàng )建帶有包含性列的索引。
注意:
SQL Server 2005 引入了組合 varchar、nvarchar、varbinary 或 sql_variant 列的功能,這些列使定義的表的總寬度超過(guò) 8,060 字節。對于 varchar、varbinary 或 sql_variant 中的每一列,其長(cháng)度不能超過(guò) 8,000 字節,對于 nvarchar 列,不能超過(guò) 4,000 字節。但是,表中這些列的組合寬度可超過(guò) 8,060 字節。這也適用于具有包含性列的非聚集索引葉行。有關(guān)詳細信息,請參閱行溢出數據超過(guò) 8 KB。
如果非聚集索引沒(méi)有任何包含性列,則使用步驟 1 中的值(包括在步驟 1.3 中進(jìn)行的任何修改):
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
如果非聚集索引確實(shí)具有包含性列,則對步驟 1 中的值加上適當的值(包括在步驟 1.3 中進(jìn)行的任何修改)。列的大小取決于數據類(lèi)型和長(cháng)度規定。有關(guān)詳細信息,請參閱數據類(lèi)型(數據庫引擎)。
Num_Leaf_Cols = Num_Key_Cols + 包含性列數
Fixed_Leaf_Size = Fixed_Key_Size + 固定長(cháng)度包含性列的總字節大小
Num_Variable_Leaf_Cols = Num_Variable_Key_Cols + 可變長(cháng)度包含性列的數量
Max_Var_Leaf_Size = Max_Var_Key_Size + 可變長(cháng)度包含性列的最大字節大小
數據行定位符說(shuō)明:
如果非聚集索引不是唯一的,則已在步驟 1.3 中考慮了數據行定位符的開(kāi)銷(xiāo)且不需要進(jìn)行其他的修改。轉到下一步。
如果非聚集索引是唯一的,則必須在葉級的所有行中說(shuō)明數據行定位符。
如果非聚集索引在堆上,則數據行定位符是堆 RID(大小為 8 字節)。
Num_Leaf_Cols = Num_Leaf_Cols + 1
Num_Variable_Leaf_Cols = Num_Variable_Leaf_Cols + 1
Max_Var_Leaf_Size = Max_Var_Leaf_Size + 8
如果非聚集索引在聚集索引之上,則數據行定位符是聚集鍵。必須與非聚集索引鍵結合使用的列是聚集鍵中的以下列:不在非聚集索引鍵列集中的列。
Num_Leaf_Cols = Num_Leaf_Cols + 不在非聚集索引鍵列集中的聚集鍵列數(如果聚集索引不唯一,則 + 1)
Fixed_Leaf_Size = Fixed_Leaf_Size + 不在非聚集索引鍵列集中的固定長(cháng)度聚集鍵列數
Num_Variable_Leaf_Cols = Num_Variable_Leaf_Cols + 不在非聚集索引鍵列集中的可變長(cháng)度聚集鍵列數(如果聚集索引不唯一,則 + 1)
Max_Var_Leaf_Size = Max_Var_Leaf_Size + 不在非聚集索引鍵列集中的可變長(cháng)度聚集鍵列的字節大?。ㄈ绻奂饕晃ㄒ?,則 + 4)
計算空位圖大?。?
Leaf_Null_Bitmap = 2 + ((Num_Leaf_Cols + 7) / 8)
僅使用上述表達式中的整數部分,而放棄所有余數。
計算可變長(cháng)度數據大?。?
如果索引鍵中有可變長(cháng)度的列(包括在以前的步驟 2.2 中所述的所有必要的聚集索引鍵列),請確定存儲索引行中的這些列需使用的空間:
Variable_Leaf_Size = 2 + (Num_Variable_Leaf_Cols x 2) + Max_Var_Leaf_Size
此公式假定所有可變長(cháng)度列均百分之百填充。如果預計可變長(cháng)度列占用的存儲空間比例較低,則可以按照該比例調整 Max_Var_Leaf_Size 值,從而對整個(gè)表大小得出一個(gè)更準確的估計。
如果沒(méi)有可變長(cháng)度的列,則將 Variable_Key_Size 設置為 0。
計算索引行大?。?
Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1(對應于索引行的行標題開(kāi)銷(xiāo))+ 6(對應于子頁(yè) ID 指針)
下一步,計算每頁(yè)的索引行數(每頁(yè)有 8096 個(gè)可用字節):
Leaf_Rows_Per_Page = 8096 / (Leaf_Row_Size + 2)
因為索引行不能跨頁(yè),所以每頁(yè)的索引行數應向下舍入到最接近的整數。公式中的數值 2 是計算行數時(shí)引入的行大小余量。
根據指定的填充因子計算每頁(yè)保留的空行數:
Free_Rows_Per_Page = 8096 x ((100 - Fill_Factor) / 100) / (Leaf_Row_Size + 2)
計算中使用的填充因子為整數值,而不是百分比。因為行不跨頁(yè),所以每頁(yè)的行數應向下舍入到最接近的整數。填充因子增大時(shí),每頁(yè)將存儲更多的數據,因此頁(yè)數將減少。公式中的數值 2 是計算行數時(shí)引入的行大小余量。
計算存儲所有行所需的頁(yè)數:
Num_Leaf_Pages = Num_Rows / (Leaf_Rows_Per_Page - Free_Rows_Per_Page)
估計的頁(yè)數應向上舍入到最接近的整數。
計算索引的大?。宽?yè)總共有 8192 個(gè)字節):
Leaf_Space_Used = 8192 x Num_Leaf_Pages
步驟 3. 對計算出的值求和
對從前面兩個(gè)步驟中得到的值求和:
Nonclustered index size (bytes) = Leaf_Space_Used + Index_Space_used
此計算不考慮以下因素:
分區
分區的空間開(kāi)銷(xiāo)很小,但是計算復雜。是否包括它并不重要。
分配頁(yè)
至少有一個(gè) IAM 頁(yè)用于跟蹤為堆分配的頁(yè),但是空間開(kāi)銷(xiāo)很小,并且沒(méi)有算法可以精確地計算出要使用的 IAM 頁(yè)數。
大型對象 (LOB) 值
精確確定存儲 LOB 數據類(lèi)型 varchar(max)、varbinary(max)、nvarchar(max)、text、ntext、xml 和 image 值所用的空間量的算法非常復雜。只需加上期望的 LOB 值的平均大小,再乘以 Num_Rows,然后將所得結果加到非聚集索引的總大小。
聯(lián)系客服