2009-12-18 44 views
3

我正在準備參加SQL Server考試(70-431)。我從Sybex "SQL Server 2005 - Implementation and Maintenance"得到這本書。我對估計表格的大小有點困惑。SQL考試 - 估算表大小問題

在第二章中有解釋如何做到這一點:

  1. 數從公式計算出的行大小: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_sizenum_variable_columns - 具有可變長度,max_varchar_size數columnt的 - varchar列的最大尺寸
    • null_bitmap = 2 + ((number of columns + 7) ÷ 8)(向下)
    • Row_header總是等於4。每頁
  2. 計算行從下式:Rows_Per_Page = 8096 ÷ (Row_Size + 2)(向下)
  3. 估計表中的行的數目。假設該表格有1,000行。
  4. 計算所需頁數:No_Of_Pages = 1,000/Rows_Per_Page(向上取整)
  5. 總大小: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。如果有人解釋我,我將不勝感激。謝謝。

+1

我不知道,但我會說,我已經在許多書籍中遇到許多錯誤:) –

回答

3

Inside the Storage Engine: Anatomy of a record說所有記錄具有記錄頭:

記錄結構如下:

  • 記錄標題
    • 4個字節長的記錄的元數據的
    • 兩個字節(記錄類型)
    • 兩個字節po inting着在記錄到空位圖