Нулевые значения сохраняют пространство для хранения?
Возможный дубликат:
Пространство, используемое нулями в базе данных
Что более эффективно с точки зрения объема памяти?
- 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 - да, они требуют немного большего количества кодировок, но в любом случае обнимают их.