Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции SQL Server.docx
Скачиваний:
49
Добавлен:
24.09.2019
Размер:
4.09 Mб
Скачать

Создание таблиц

После определения типов данных, если это необходимо, можно приступить к созданию таблиц. Необходимо понимание того, как SQL Server хранит данные, и как определяются столбцы для оптимального хранения и производительности.

Как организовано хранение данных в строках

Строка данных состоит из заголовка и данных.

Четырехбайтный заголовок строки содержит информацию о столбцах: указатель конца порции данных фиксированной длины и существуют ли данные переменной длины в данной строке.

Раздел данных строки может содержать следующие элементы:

Данные фиксированной длины. Эти данные располагаются до начала данных переменной длины. Пустые данные фиксированной длины занимают столько же места, сколько и непустые данные фиксированной длины. Поэтому, если таблица содержит только фиксированные данные, то каждая страница хранит одинаковое число строк.

Null-блок. Содержит набор байт переменной длины. Он состоит из 2 байт, хранящих число столбцов, имеющих null-значения. Далее следует битовая карта, показывающая, какие столбцы принимают null-значения. Размер битовой карты равен числу бит из расчета 1 бит на столбец, округленных до ближайшего большего числа байт. Восемь столбцов требуют 1-байтной битовой карты, 16 столбцов – 2-хбайтной и т.д.

Переменный блок. Первые 2 байта хранят число столбцов переменной длины. Дополнительно, каждые следующие 2 байта хранят указатель на конец столбца переменной длины. Переменный блок отсутствует, если нет столбцов переменной длины.

Данные переменной длины. Эти данные следуют за данными фиксированной длины. Пустые данные переменной длины не занимают места. Поэтому таблица со столбцами переменной длины может иметь строки разной длины.

Как хранятся большие значения данных

Строка не может быть больше чем страница данных. Поэтому, столбец не может хранить значение, занимающее более чем 8 Кб. Большие данные хранятся отдельно от строки, а в строке содержится только указатель на эти данные.

Типы данных LOB (Large Object) могут храниться как одна коллекция страниц или в строках данных. К типам данных LOB относятся:

text. Этот тип данных может хранить до 2 147 483 647 символов. Этот тип данных не может использоваться в хранимых процедурах.

ntext. Может хранить в 2 раза меньше символов, чем тип данных text.

image. Может хранить до 2 Gb двоичных данных.

Так как text, ntext и image хранят обычно большие объемы данных, то SQL Server хранит их отдельно от строк. 16-байтный указатель в строке данных указывает на корень B-дерева, содержащего данные. Этот корень есть указатель на блоки данных. Если данные занимают больше, чем 32 Kb, то организуются промежуточные узлы между корнем и блоками данных.

Если содержимое LOB типов не очень большое (до 8 Kb), то SQL Server допускает хранение их значений непосредственно в строках данных.

С типами данных varchar, nvarchar и varbinary может использоваться спецификатор max. Тогда они допускают значения более 8 Kb и эти значения хранятся подобно значениям LOB-типов.

Можно управлять местом хранения больших значений типов varchar, nvarchar и varbinary с помощью опции large value types out of row хранимой процедуры sp_tableoption. Если эта опция имеет значение ON, то большие данные хранятся отдельно от строк. Иначе (опция OFF), эти данные могут храниться непосредственно в строке или отдельно в зависимости от того, сколько они реально занимают места.