Какие значения не хранятся на диске InnoDB? - PullRequest
0 голосов
/ 22 января 2010

У меня довольно большая таблица в InnoDB, и я хочу минимизировать ее размер, в пределах разумного. Для нескольких столбцов значения почти всегда одинаковы в каждой строке, поэтому я хочу попробовать воспользоваться этим.

Например, если у меня есть столбец int (или datetime или varchar или что-то еще), будет ли значение null в этом столбце фактически не сохраняться на диске? То есть это будет меньше, чем хранить число 1 в каждой строке?

Или в столбце int not null default 0 займет 0 меньше места, чем 1, или вообще не будет места?

(Я знаю, что я могу просто попробовать это на некоторых больших таблицах, но для моих реальных данных это будет медленно, и измерение размеров вещей в базах данных может быть привередливым, поэтому я хотел бы услышать, что кто-то говорит немного компетентно!)

Ответы [ 2 ]

0 голосов
/ 22 января 2010

Int - это int, это int, поэтому 0 не займет меньше места, чем 1. И NULL просто будет специальным значением, которое находится в том же пространстве.

Звучит так, будто вы спрашиваете о разреженной настройке столбца, где NULLS представлены значением, значительно меньшим, чем тип данных, или не сохраненным вообще. Я ничего не могу найти по этому поводу для InnoDB, но есть куча вещей о разреженных столбцах в SQL Server 2008.

0 голосов
/ 22 января 2010

Хранение для каждого столбца зависит от типа данных требование .

1 как INT занимает 4 байта, а 1 как BIGINT занимает 8 байтов.

Если производительность не является проблемой, проверьте сжатие для InnoDB.

...