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