Влияние значений NULL на хранилище в SQL Server? - PullRequest
4 голосов
/ 14 сентября 2011

Если у вас есть таблица с 20 строками, которая содержит 12 нулевых столбцов и 8 столбцов со значениями, как это повлияет на хранение и использование памяти?

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

Это для сервера Sql.

Ответы [ 2 ]

7 голосов
/ 14 сентября 2011

Это зависит от механизма базы данных, а также от типа столбца.

По крайней мере, SQLite сохраняет каждый пустой столбец как «нулевой тип», который занимает NO дополнительное пространство (каждая запись сериализуетсяв один большой двоичный объект для хранения, поэтому в этом случае резервируется нет пространства для ненулевого значения).При такой оптимизации значение NULL имеет очень мало накладных расходов для хранения.(SQLite также имеет оптимизацию для значений 0 и 1 - разработчики баз данных не играют!) Подробнее см. 2.1 Формат записи .

Теперь, вещи могут многое получитьболее сложный, особенно с обновлением и потенциальной фрагментацией индекса.Например, в SQL Server пространство может быть зарезервировано для данных столбца, в зависимости от типа.Например, int null все равно зарезервирует место для целого числа (а также где-то будет иметь флаг "is null"), однако varchar(100) null, похоже, не зарезервирует пространство (последний бит из памяти, так чтопредупрежден!).

Удачного кодирования.

3 голосов
/ 14 сентября 2011

Начиная с SQL Server 2008, вы можете определить столбец как SPARSE, если у вас есть «тонна нулей».Это сэкономит некоторое пространство, но требует, чтобы часть значений столбца была нулевой.Сколько именно зависит от типа.

См. Таблицы Расчетная экономия пространства по типу данных в статье Использование разреженных столбцов , в которых будет указано, какой процент значенийдолжен быть нулевым для чистой экономии 40%

Например, согласно таблицам 98% значений в поле bit должны быть нулевыми, чтобы получить экономию 40%, в то время как только 43% отСтолбец uniqueidentifier даст вам такой же процент.

...