估計堆積的大小
適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric 中的 SQL 資料庫
您可以使用下列步驟,估計儲存堆積中的資料所需的空間量:
指定表格中將會有的列數:
Num_Rows = 資料表中的資料列數量
指定固定長度與可變長度資料行的數目,並計算儲存這些資料行所需的空間:
計算這兩組資料行在資料列內各佔多少空間。 資料行的大小取決於資料類型和長度規格。
Num_Cols = 資料行 (固定長度和可變長度) 的總數
Fixed_Data_Size = 所有固定長度資料行的總位元組大小
Num_Variable_Cols = 可變長度資料行的數量
Max_Var_Size = 所有可變長度資料行的總位元組大小上限
資料列中的一部分,稱為 Null 點陣圖,是預留空間用來管理欄位的可為空性。 計算它的大小:
Null_Bitmap = 2 + ((Num_Cols + 7) / 8)
您應該僅使用這個運算式的整數部分。 請捨去任何餘數。
計算可變長度資料的大小:
如果在索引中有可變長度的資料行,請決定將資料行儲存到索引列中所需的空間大小。
Variable_Data_Size = 2 + (Num_Variable_Cols x 2) + Max_Var_Size
新增到 Max_Var_Size 之位元組是用於追蹤每個可變長度的資料行。 這個公式假設所有可變長度的資料行是 100% 填滿的。 如果您預期可變長度資料行所佔儲存空間的百分比會比較低,您可以經由調整百分比所得的 Max_Var_Size 值,取得更精確的整體資料表大小估計值。
注意
您可以結合使定義的資料表總寬度超過 8,060 個位元組的 varchar、 nvarchar、 varbinary或 sql_variant 資料行。 這些資料行的每個長度必須仍然在 varchar、nvarchar、varbinary 或 sql_variant 資料行的 8,000 個位元組限制內。 然而,結合的寬度可能超過資料表中 8,060 位元組的限制。
如果沒有可變長度資料行,請將 Variable_Data_Size 設為 0。
計算資料列總大小:
Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4
公式中數值 4 表示資料列的列標頭額外負擔。
計算每個分頁的資料列數目 (每個分頁包含 8096 個可用位元組):
Rows_Per_Page = 8096 / (Row_Size + 2)
因為資料列不能跨頁,每頁的資料列數目應向下取整為最接近的整數。 公式中的值 2 是用於頁面槽陣列中該列的項目。
計算儲存所有資料列所需的分頁數目:
頁數 = 行數 / 每頁行數
預估的頁數應該要四捨五入至最接近的整頁。
計算儲存堆積內的資料所需的空間 (每個頁面共有 8192 個位元組):
堆積大小 (位元組) = 8192 x Num_Pages
上述計算未考慮下列項目:
劃分
從分割而來的空間負擔非常小,但計算相對複雜。 不一定要包含它。
分配頁面
至少有一個 IAM 頁面用以追蹤配置到堆的頁面,但其空間負擔非常小,且沒有演算法可以精確地計算將使用多少 IAM 頁面。
大型物件 (LOB) 值
決定到底要使用多少空間來儲存 LOB 資料類型 varchar(max) 、 varbinary(max) 、 nvarchar(max) 、 text、 ntextxml和 image 值的演算法是很複雜的。 只要將預期的 LOB 值的平均大小加入,並將其計入堆積大小的總計,這樣就足夠了。
壓縮
您無法預先計算壓縮堆積的大小。
稀疏列
如需有關疏鬆資料行空間需求的詳細資訊,請參閱< Use Sparse Columns>。
另請參閱
堆疊 (無叢集索引的資料表)
叢集與非叢集索引說明
建立叢集索引
建立非叢集索引
估計資料表的大小
估計叢集索引的大小
估計非叢集索引的大小
估計資料庫的大小