Подтвердить что ты не робот

MySQL: сколько пространства использует поле NULL?

Делает ли нулевое значение NULL сохранить любую память в сравнении с ее нормальным размером?

4b9b3361

Ответ 1

Если вы установите поле как not null, в MyISAM потребуется меньше.
Установка его для принятия null заставит его занять больше места в MyISAM.

В значениях InnoDB null меньше места, поэтому он может работать там.

Если вы используете поле blob, MySQL все равно сохранит его в другом файле.

Альтернативно (моя рекомендация)
Другой вариант - не добавить поле в эту таблицу, но сделать

table extra_data
   id integer primary key
   big_table_id integer
   large_data_seldom_used varchar(65000)

Если вам нужно выбрать дополнительные данные:

SELECT large_data_seldom_used FROM bigtable b
INNER JOIN extra_data e ON (e.big_table_id = b.id)

Таким образом, вам не нужно добавлять дополнительное поле к большой таблице вообще, экономя много места, если extra_field редко используется.

Ответ 2

Это обсуждается в главе руководства по MySQL Требования к хранилищу. Нет простого ответа; это зависит от типа данных столбца, индексируется ли столбец; и механизм хранения. Влияние использования NULL для столбца может варьироваться от нуля до нескольких байтов (в зависимости от того, сколько других столбцов также может иметь значение NULL.)

Влияние хранилища на объявление столбца как приема NULL и фактическое сохранение значения NULL, вероятно, незначительно. Наличие столбца с большим количеством значений NULL часто указывает на необходимость (дальнейшей) нормализации.

Основным правилом является создание вашей схемы на основе свойств данных, а не влияния хранилища. Исправьте вещи, только если они окажутся проблемой.

Ответ 3

Кроме того, хотя самому NULL не требуется никакого пространства для хранения, NDBCLUSTER резервирует 4 байта на строку, если определение таблицы содержит какие-либо столбцы, определенные как NULL, до 32 столбцов NULL. (Если таблица кластеров NDB определена с более чем 32 столбцами NULL и 64 столбцами NULL, то зарезервировано 8 байтов на строку.)