3
我正在準備參加SQL Server考試(70-431)。我從Sybex "SQL Server 2005 - Implementation and Maintenance"得到這本書。我對估計表格的大小有點困惑。SQL考試 - 估算表大小問題
在第二章中有解釋如何做到這一點:
- 數從公式計算出的行大小:
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
數columnt的 - varchar列的最大尺寸null_bitmap = 2 + ((number of columns + 7) ÷ 8)
(向下)Row_header
總是等於4
。每頁
- 計算行從下式:
Rows_Per_Page = 8096 ÷ (Row_Size + 2)
(向下) - 估計表中的行的數目。假設該表格有1,000行。
- 計算所需頁數:
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行。問題(literaly):「應收賬款表格需要多少空間?」
所以我的答案很簡單:
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
。如果有人解釋我,我將不勝感激。謝謝。
我不知道,但我會說,我已經在許多書籍中遇到許多錯誤:) –