代码之家  ›  专栏  ›  技术社区  ›  Lukasz Lysik

sql考试-估计表大小问题

  •  3
  • Lukasz Lysik  · 技术社区  · 16 年前

    我正在准备SQL Server考试(70-431)。我有西贝的书 "SQL Server 2005 - Implementation and Maintenance" . 我对估计桌子的大小有点困惑。

    在第二章中,我们将解释如何做到这一点:

    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_size , num_variable_columns -可变长度的列数, max_varchar_size -varchar列的最大大小
      • null_bitmap = 2 + ((number of columns + 7) ÷ 8) (四舍五入)
      • Row_header 总是相等的 4 .
    2. 从公式计算每页行数: Rows_Per_Page = 8096 ÷ (Row_Size + 2) (四舍五入)
    3. 估计表中的行数。假设表有1000行。
    4. 计算所需页数: No_Of_Pages = 1,000 / Rows_Per_Page (四舍五入)
    5. 总尺寸: 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 而且他们没有添加 . 是书上的错误还是 行标题 只有在某些情况下才添加(书中没有提到的情况)?我在想也许 行标题 仅当表中有可变长度字段时才添加,但在另一个练习中没有可变长度字段和 行标题 添加。如果有人给我解释一下,我会很感激的。谢谢。

    1 回复  |  直到 16 年前
        1
  •  3
  •   Remus Rusanu    16 年前

    Inside the Storage Engine: Anatomy of a record 说所有记录都有一个记录头:

    记录结构如下:

    • 记录头
      • 4字节长
      • 两个字节的记录元数据(记录类型)
      • 记录中指向空位图的两个字节
    推荐文章