В MyISAM MYSQL вы сохраняете один бит за строку, не используя NULL. Как указано here:
Объявление столбцов NULL может уменьшить максимальное количество разрешенных столбцов. Для таблиц MyISAM столбцам NULL требуется дополнительное пространство в строке для записи значений NULL. Каждый столбец NULL занимает один бит, округленный до ближайшего байта.
Посмотрите here, а также:
Кроме того, в то время как сам NULL не требует места для хранения, NDB кластер резервы 4 байта на строку, если определение таблицы содержит столбцы, определенные как NULL, до 32 столбцов NULL. (Если таблица кластера MySQL, определяются с более чем 32 NULL столбцов до 64 NULL столбцов, а затем 8 байт в строку зарезервирован.)
Кроме того это также делает работу базы данных быстрее на это указано here (взято из stackoverflow - @DavidWinterbottom ссылки не работаем для меня, я добавил другой Sourse)
Это сложнее для MySQL оптимизации запросов, которые ссылаются на обнуляемый coumns, потому что они делают индексы, статистику индексов и сравнение значений более сложным. Столбец с нулевым значением использует больше пространства для хранения и требует специальной обработки внутри MySQL. Когда индексируемый нулевой столбец индексируется, для него требуется дополнительный байт для каждой записи и может даже привести к тому, что индексом фиксированного размера (например, индексом в одном целочисленном столбце) будет преобразован в переменный размер в MyISAM.
В большинстве случаев не-NULL значения ведут себя более предсказуемо, когда в сочетании с COUNT()
и другой агрегационной функции, но вы также можете увидеть, ведут себя NULL в соответствии с вашими потребностями.
Как указано here, не все группы (агрегатные) функции игнорировать NULL, например, COUNT()
даст вам другой результат, который COUNT(*)
для столбца, содержащего NULL значения.
С другой стороны, как другой пункт NULL лучше отражает смысл ввода - это неизвестное значение, и если вы хотите посчитать все хосты, вы, вероятно, должны COUNT()
вести себя точно так, как он.
Это своего рода субъективно, но NULL несет в себе значение «неприменимо», которое кажется самым естественным здесь. Эффективность не должна быть фактором. –
@Jack Ну, эффективность всегда является фактором;) – user2352129
Нужно ли быть именам хостов? Вы когда-нибудь ожидали, что несколько IP-адресов разрешат одно и то же имя хоста? –