gpt4 book ai didi

SQL 考试 - 估计表大小问题

转载 作者:行者123 更新时间:2023-12-02 00:43:05 28 4
gpt4 key购买 nike

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

在第 2 章中解释了如何执行此操作:

  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 - 的最大大小可变字符列
    • null_bitmap = 2 + ((列数 + 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 行。问题(字面意思):“应收账款表需要多少空间?”

所以我的回答很简单:

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被添加。如果有人向我解释,我将不胜感激。谢谢。

最佳答案

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

The record structure is as follows:

  • record header
    • 4 bytes long
    • two bytes of record metadata (record type)
    • two bytes pointing forward in the record to the NULL bitmap

关于SQL 考试 - 估计表大小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1930852/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com