Нулевые значения сохраняют пространство для хранения?

Возможный дубликат:
Пространство, используемое нулями в базе данных

Что более эффективно с точки зрения объема памяти?

  • A nullable int, заполненный нулями.
  • Столбец int с нулями.

Я знаю, что столбец с нулевым значением принимает один дополнительный бит информации для хранения его нулевого состояния, но имеет нулевые значения, сохраняя базу данных от распределения 32 бит для int, который является нулевым?

(нулевая семантика и значение null не важны для этого вопроса)

Ответы

Ответ 1

Для полей с фиксированной шириной, таких как нулевое значение, требуемое пространство хранения всегда одинаково независимо от того, является ли значение нулевым или нет.

Для полей с нулевым значением переменной ширины значение NULL 'принимает нулевые байты пространства для хранения (игнорируя бит для сохранения, является ли значение нулевым или нет).

Ответ 2

Если вы используете SQL Server 2008 и ожидаете иметь значительное количество значений NULL в столбцах, я бы предложил вам исследовать разреженные столбцы, Они оптимизированы для хранения значений NULL.

Ответ 3

SQL Server 2008 представил Разреженные столбцы для столбцов, которые в основном имеют NULL.

Столбец SPARSE для строки, которая имеет значение NULL, использует 0 бит памяти. Но вы платите штраф в 4 байта, если есть значение.

Ответ 4

0 не является нулевым. Если у вас нет значения для поля, не помещайте туда нуль! Я не могу сказать вам, сколько раз я сталкивался с ошибками, которые по сути являются невыполнимыми, потому что у нас нет способа узнать, были ли нули в производственной базе данных реальными нулями или ложными нулями. Embrace nulls - да, они требуют немного большего количества кодировок, но в любом случае обнимают их.