MySQL — Использование ‘Разрешить NULL’

#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» не всегда работает.)