Когда использовать NULL в таблицах MySQL - PullRequest
48 голосов
/ 23 января 2009

Я ценю семантическое значение значения NULL в таблице базы данных, отличающегося как от false, так и от пустой строки ''. Тем не менее, я часто читал о проблемах производительности, когда поля обнуляются, и мне посоветовали использовать пустую строку в случаях, когда NULL на самом деле семантически правильно.

Какие обстоятельства подходят для использования пустых полей и значений NULL? Каковы компромиссы? Разумно ли вообще избегать использования значений NULL и просто использовать пустые строки, false или 0, чтобы указать на отсутствие значения?

UPDATE

ОК. Я понимаю семантическое различие между '' и NULL, а также (не зависящие от производительности) обстоятельства, при которых NULL является подходящим значением поля. Тем не менее, позвольте мне подробнее остановиться на проблеме производительности. Это из превосходного "Высокопроизводительного MySQL" Шварца, Зейцева и др. http://www.borders.co.uk/book/high-performance-mysql-optimization-backups-replication-and-more/857673/:

MySQL труднее оптимизировать запросы, которые относятся к обнуляемым кумнам, потому что они делают индексы, индекс статистика и сравнение ценностей больше сложно. Обнуляемый столбец использует больше места для хранения и требует специальная обработка внутри MySQL. когда обнуляемый столбец индексируется, это требуется дополнительный байт на запись и может даже вызвать фиксированный размер (например, указатель на одно целое число столбец) для преобразования в переменный размер в MyISAM.

Больше здесь: Просмотр книг Google

Вполне возможно, что окончательный ответ - я просто искал второе мнение и опыт с фронта.

Ответы [ 11 ]

0 голосов
/ 23 января 2009

Любой уважающий себя движок базы данных в наши дни не должен предлагать штраф за правильное использование NULL, если ваш запрос не разработан правильно (что обычно не является проблемой, с которой вы часто сталкиваетесь в отношении NULL).

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

Совокупный эффект неправильных значений NULL-столбцов как в сложности, так и в точности SQL почти наверняка перевесит преимущества дурачения с материнской СУБД. Кроме того, это испортит вам голову, а также всем, кто позже попытается выяснить, что вы пытались сделать.

...