#mysql #null #schema
#mysql #значение null #схема
Вопрос:
Ускоряет ли использование NULL для заполнения пустых ячеек в моих таблицах поиск / запросы?
Например, это
90 2 65 2011-04-08 NULL NULL
134 2 64 2011-04-13 NULL 07:00:00
135 2 64 2011-04-13 NULL 07:00:00
136 2 64 2011-04-13 NULL 22:45:00
137 2 64 2011-04-14 NULL 19:30:00
лучше, чем
90 2 65 2011-04-08
134 2 64 2011-04-13 07:00:00
135 2 64 2011-04-13 07:00:00
136 2 64 2011-04-13 22:45:00
137 2 64 2011-04-14 19:30:00
Если бы кто-нибудь мог рассказать мне о каком-либо конкретном преимуществе использования NULL (производительность, хорошая практика и т.д.), Это было бы очень ценно.
Комментарии:
1. Использование NULL вместо некоторого другого ‘пустого значения’ (такого как 0 или пустая строка) не повлияет на производительность (за исключением, возможно, наиболее патологически продуманных случаев). Итак, пожалуйста, вообще не думайте о «производительности» с NULL . Однако бывают хорошие времена для использования столбцов с нулевым значением и плохие времена — это, конечно, зависит от модели.
2. спасибо @pst — я поискал в Google, но не смог найти хорошего ответа на этот вопрос — ваш кажется довольно хорошим — не хотели бы вы добавить в качестве ответа?
3. Там будут ответы получше 🙂
Ответ №1:
Существует семантическая разница.
NULL
означает «значение неизвестно или неприменимо».
Если это описывает данные для этого столбца, то используйте это.
- Пустая строка означает «значение известно, и это «ничто»».
Если это описывает данные для этого столбца, то используйте это. Конечно, это относится только к строкам; необычно иметь такой сценарий для других типов данных, но обычно для числовых полей здесь было бы уместно значение 0
.
Короче говоря, это зависит в основном от того, что означают ваши поля. Побеспокойтесь о производительности и профилировании позже, когда будете знать, какие данные вы представляете. (однако NULL
vs ""
никогда не будет вашим узким местом.)
Комментарии:
1. 1 Иногда я хотел бы, чтобы в SQL было значение «Я спрашивал, но не получил ответа».
2. @pst: Для меня звучит как
NULL
. Опять же, это зависит от модели.3. спасибо @tomalak — рассматриваемая таблица представляет собой таблицу данных, в которой пользователи хранят всевозможные записи, такие как дата, местоположение, тип упражнения, продолжительность и т.д. — не все поля будут обязательными, поэтому по всей таблице будут некоторые пробелы — я подумал, могут ли они негативно повлиять на производительность, когда эта единственная таблица станет большой с большим количеством пользователей и записей
4. @torr: Нет. Они в значительной степени не могли.
5. @Tomalak Geret’kal Рассмотрим различные состояния: 1) Не спрашивал у салфетки ее название, потому что это салфетка, а имя не требуется (NULL) 2) Спросил у салфетки ее название, и она сказала, что это салфетка с именем без значения («») 3) Спросил у салфетки ее название, но салфетка (будучи салфеткой) не ответила (—> ??? <—). Иногда я действительно хочу, чтобы была разница между НЕОПРЕДЕЛЕННЫМ / НЕИЗВЕСТНЫМ (в SQL NULL должен пытаться заполнить оба, в зависимости от модели и определения значений. Из-за проблем с уникальностью индекса «пустой sentinel» не всегда работает.)