SQL Exam - оценка проблемы с размером таблицы - PullRequest
3 голосов
/ 19 декабря 2009

Я готовлюсь к экзамену по SQL Server (70-431). У меня есть книга от Sybex "SQL Server 2005 - Внедрение и сопровождение" . Я немного запутался в оценке размера стола.

Во 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_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, где 8 192 - это размер одной страницы.

Так что для меня все совершенно ясно. Я сделал один пример и проверил ответы в книге, что мои расчеты верны. Но есть один вопрос, который меня смущает.

Вопрос: у нас есть таблица со следующей схемой:

Name       Datatype
-------------------
ID         Int
VendorID   Int
BalanceDue Money
DateDue    Datetime

Ожидается, что в этой таблице будет около 5000 строк. Вопрос (буквально): «Сколько места займет таблица Receivables?»

Так что мой ответ прост:

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 голосов
/ 19 декабря 2009

Внутри механизма хранения: анатомия записи говорит, что все записи имеют заголовок записи:

Структура записи выглядит следующим образом:

  • заголовок записи
    • длина 4 байта
    • два байта метаданных записи (тип записи)
    • два байта, указывающие вперед в записи на растровое изображение NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...