估計無叢集索引的表的大小
下列步驟可用於估計儲存沒有叢集索引的表上的資料和任何附加的非叢集索引所需的空間。
- 計算儲存資料所用的空間。
- 計算儲存每個附加非叢集索引所用的空間。
- 匯總計算所得的值。
對於每個計算,都要指定將在表中出現的行數。表中的行數將對錶的大小有直接影響:
表中的行數 = 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
- 下一步,計算每頁的索引行數(每頁有 8096 個可用位元組):
每頁的索引行數 (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 個位元組):
非叢集索引大小(位元組) = 8192 x Num_Index_Pages
計算表的大小
計算表的大小:
表的總大小(位元組)= Data_Space_Used + Nonclustered index size + ...n