Сколько размер "Null" значение принимает в SQL Server
У меня есть большая таблица с 10 колонками. 4 из них остается пустым большую часть времени. У меня есть запрос, который делает нулевое значение принимает любой размер или размер в байтах. Я прочитал несколько статей, некоторые из них говорят:
http://www.sql-server-citation.com/2009/12/common-mistakes-in-sql-server-part-4.html
Существует ошибочное мнение, что если у нас есть значения NULL в таблице, она не занимает места для хранения. Дело в том, что значение NULL занимает место – 2 байта
SQL: использование нулевых значений против значений по умолчанию
A
NULLзначение в базах данных-это системное значение, которое занимает один байт памяти и указывает, что значение отсутствует в отличие от пробела или нуля или любого другого значения по умолчанию.
Не могли бы вы направить меня относительно размера, взятого нулевым значением.
4 ответов:
Если поле фиксированной ширины хранения NULL занимает то же пространство, что и любое другое значение - ширина поля.
Если поле переменной ширины нулевое значение не занимает места.
в дополнение к пространству, необходимому для хранения нулевого значения, есть также накладные расходы для наличия столбца с нулевым значением. Для каждой строки один бит используется в столбце с нулевым значением, чтобы отметить, является ли значение для этого столбца нулевым или нет. Это верно независимо от того, является ли столбец фиксированным или переменным длина.
причиной несоответствия, которые вы наблюдали в информации из других источников:
старт первой статьи немного вводит в заблуждение. В статье речь идет не о стоимости хранения нулевого значения, а о стоимости наличия способности чтобы сохранить значение NULL (т. е. стоимость обнуления столбца). Это правда, что это стоит что-то в пространстве для хранения, чтобы сделать столбец nullable, но как только вы это сделали для хранения значения NULL требуется меньше места, чем для хранения значения (для столбцов переменной ширины).
вторая ссылка, кажется, вопрос о Microsoft Access. Я не знаю подробностей о том, как Access хранит нули, но я не удивлюсь, если он отличается от SQL Server.
следующая ссылка утверждает, что если столбец переменной длины, т. е.
varcharзатемNULLзанимает 0 байт (плюс 1 байт используется, чтобы отметить, является ли значениеNULLили нет):приведенная выше ссылка, а также ссылка ниже, утверждают, что для столбцов фиксированной длины, т. е.
char(10)илиint, стоимостьюNULLзанимает длину столбца (плюс 1 байт, чтобы отметить, является ли этоNULLили нет):примеры:
- если вы устанавливаете
char(10)доNULL, он занимает 10 байт (обнуляться)- An
intзанимает 4 байта (также обнуляет).- A
varchar(1 million)значениеNULLзанимает 0 байт (+ 2 байта)Примечание: На небольшой касательной, размер хранения
varchar- Это длина введенных данных + 2 байта.
каждая строка имеет нулевое растровое изображение для столбцов это позволяет нули. Если строка в этом столбец имеет значение NULL, то немного в Рисунок 1, иначе 0.
для типов данных переменного размера точный размер-0 байт.
для типа данных фиксированного размера acctual размер-это размер типа данных по умолчанию в байт установлен в значение по умолчанию (0 для цифры " для символов).
хранение нулевого значения не занимает никакого места.
" дело в том, что нулевое значение занимает Космос – 2 байта."
Это заблуждение ... это 2 байта в строке, и я уверен, что все строки используют эти 2 байта независимо от того, есть ли какие-либо столбцы с нулевым значением.
нулевое значение в базах данных-это система значение, которое занимает один байт хранение
Это говорит о базы данных в целом, а не конкретно SQL Server. SQL Server не использует 1 байт для хранения нулевых значений.
Comments