我正在准备SQL Server考试(70-431)。我有西贝的书
"SQL Server 2005 - Implementation and Maintenance"
. 我对估计桌子的大小有点困惑。
在第二章中,我们将解释如何做到这一点:
-
从公式中计算行大小:
Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + Row_Header
.
-
Fixed_Data_Size
是固定长度列的所有大小的总和(简单和)
-
Variable_Data_Size = 2 + (num_variable_columns à 2) + max_varchar_size
,
num_variable_columns
-可变长度的列数,
max_varchar_size
-varchar列的最大大小
-
null_bitmap = 2 + ((number of columns + 7) ÷ 8)
(四舍五入)
-
Row_header
总是相等的
4
.
-
从公式计算每页行数:
Rows_Per_Page = 8096 ÷ (Row_Size + 2)
(四舍五入)
-
估计表中的行数。假设表有1000行。
-
计算所需页数:
No_Of_Pages = 1,000 / Rows_Per_Page
(四舍五入)
-
总尺寸:
Total_Size = No_Of_Pages * 8,192
,其中8192是一页的大小。
所以对我来说一切都很清楚。我举了一个例子,根据书中的答案,我的计算是正确的。但有一个问题让我困惑。
问题是:我们有一个具有以下架构的表:
Name Datatype
-------------------
ID Int
VendorID Int
BalanceDue Money
DateDue Datetime
预计此表中大约有5000行。问题(文字):“应收款表需要多少空间?”
所以我的回答很简单:
null_bitmap = 2 + ((4+7) / 8) = 3.375 = 3 (rounded)
fixed_datasize = 4 + 4 + 8 + 8 = 24
variable_datasize = 0
row_header = 4 (always)
row_size = 3 + 24 + 0 + 4 = 31
但在回答中他们忽略了
row_header
而且他们没有添加
四
. 是书上的错误还是
行标题
只有在某些情况下才添加(书中没有提到的情况)?我在想也许
行标题
仅当表中有可变长度字段时才添加,但在另一个练习中没有可变长度字段和
行标题
添加。如果有人给我解释一下,我会很感激的。谢谢。