У меня есть большая таблица с 10 столбцами. 4 из них в большинстве случаев остаются нулевыми. У меня есть запрос, который имеет нулевое значение, принимает любой размер или не имеет размера в байтах. Я прочитал несколько статей, в которых говорится:
http://www.sql-server-citation.com/2009/12/common-mistakes-in-sql-server-part-4.html
Существует заблуждение, что если у нас есть значения NULL в таблице, она не занимает места для хранения. Дело в том, что значение NULL занимает место - 2 байта
SQL: использование значений NULL и значений по умолчанию
NULL
Значение в базах данных представляет собой значение , система , которая занимает один байт памяти , и указывает на то, что значение не присутствует в отличие от пространства или ноль или любое другое значение по умолчанию.
Не могли бы вы посоветовать мне размер нулевого значения.
источник
byte
(обычно 8 бит). Так что на самом деле abit
принимает файлbyte
. Отличный ответ Марк: +1.Следующие утверждения , что ссылка , если столбец является переменной длиной, т.е.
varchar
затемNULL
принимает 0 байт (плюс 1 байты используются для флага , является ли значениеNULL
или нет):В приведенной выше ссылке, а также в приведенной ниже ссылке, утверждается, что для столбцов фиксированной длины, т. Е.
char(10)
Илиint
, значениеNULL
занимает длину столбца (плюс 1 байт, чтобы указать, является ли это значениеNULL
или нет):Примеры:
char(10)
значениеNULL
, он занимает 10 байт (обнулен)int
занимает 4 байта (также обнуленные).varchar(1 million)
Набор дляNULL
занимает 0 байт (+ 2 байта)Примечание: при небольшом касании размер хранилища
varchar
равен длине введенных данных + 2 байта.источник
По этой ссылке :
источник
Сохранение значения NULL не занимает места.
Это заблуждение - это 2 байта на строку , и я почти уверен, что все строки используют эти 2 байта независимо от того, есть ли какие-либо столбцы, допускающие значение NULL.
Речь идет о базах данных в целом, а не конкретно о SQL Server. SQL Server не использует 1 байт для хранения значений NULL.
источник