我正准备参加SQL Server考试(70-431)。我收到了Sybex "SQL Server 2005 - Implementation and Maintenance"的书。我对估计一张桌子的大小感到困惑。
在第2章中解释了如何执行此操作:
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)
(向下舍入)No_Of_Pages = 1,000 / Rows_Per_Page
(向上舍入)Total_Size = No_Of_Pages * 8,192
,其中8,192是一页的大小。所以一切都非常清楚。我做了一个例子,并用书中的答案检查我的计算是否正确。但有一个问题让我困惑。
问题是:我们有一个包含以下架构的表:
Name Datatype
-------------------
ID Int
VendorID Int
BalanceDue Money
DateDue Datetime
预计在此表中将有大约5,000行。问题(文字):“应收款管理系统表格将占用多少空间?”
所以我的答案很简单:
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
并且他们没有添加4
。这是书中的错误还是仅在某些情况下添加了row_header
(书中没有提到)?我想可能只有在表中有可变长度字段时才添加row_header
,但是还有另一个练习,其中没有可变长度字段并且添加了row_header
。如果有人解释我,我将不胜感激。感谢。
答案 0 :(得分:3)
Inside the Storage Engine: Anatomy of a record表示所有记录都有记录标题:
记录结构如下:
- 记录标题
- 4个字节长
- 两个字节的记录元数据(记录类型)
- 记录中向前指向NULL位图的两个字节