MySQL: ПУСТОЙ УКАЗАТЕЛЬ по сравнению с “”

Не имея необходимость переписывать большие блоки, можно использовать Встроенный:: C для преобразования любой единственной, медленной подпрограммы в C. Или непосредственно используйте XS. Также возможно инкрементно преобразовать нижние индексы с XS. PPI/PPI:: XS делает это, например.

, Но перемещающийся в другой язык всегда последнее средство. Возможно, необходимо ли заставить опытного программиста Perl смотреть код? Более вероятно, чем не, (s) он определил бы некоторую особенность, это серьезно повреждает Вашу производительность. Кроме этого, представьте свой код. Помните, нет никакой серебряной пули.

Относительно психо и пирекс: Нет, нет никакого эквивалента для Perl.

44
задан Ion Br. 9 July 2009 в 20:34
поделиться

10 ответов

Use default null. In SQL, null is very different from the empty string (""). The empty string specifically means that the value was set to be empty; null means that the value was not set, or was set to null. Different meanings, you see.

The different meanings and their different usages are why it's important to use each of them as appropriate; the amount of space potentially saved by using default null as opposed to default "" is so small that it approaches negligibility; however, the potential value of using the proper defaults as convention dictates is quite high.

41
ответ дан 26 November 2019 в 21:41
поделиться

Используйте все, что имеет смысл. NULL означает «нет доступного / указанного значения», «» означает «пустая строка».

Если вы не разрешаете пустые строки, но пользователю не нужно вводить значение, тогда NULL имеет смысл. Если вам требуется значение, но оно может быть пустым, NOT NULL и значение "" имеет смысл.

И, конечно, если вам не требуется значение, но можно указать пустое значение, тогда NULL имеет смысл.

С точки зрения эффективности, дополнительный бит используется, чтобы определить, является ли поле NULL или нет, но не беспокойтесь о такой микрооптимизации, пока не получите миллионы строк.

3
ответ дан 26 November 2019 в 21:41
поделиться

A lot of folks are answering the what is the difference between null and '', but the OP has requested what takes up less space/is faster, so here's my stab at it:

The answer is that it depends. If your field is a char(10), it will always take 10 bytes if not set to null, and therefore, null will take up less space. Minute on a row-by-row basis, but over millions and millions of rows, this could add up. I believe even a varchar(10) will store one byte (\0) as an empty string, so again this could add up over huge tables.

In terms of performance in queries, null is in theory quicker to test, but I haven't seen able to come up with any appreciable difference on a well indexed table. Keep in mind though, that you may have to convert null to '' on the application side if this is the desired return. Again, row-by-row, the difference is minute, but it could potentially add up.

All in all it's a micro-optimization, so it boils down to preference. My preference is to use null because I like to know that there's no value there, and not guess if it's a blank string ('') or a bunch of spaces (' '). null is explicit in its nature. '' is not. Therefore, I go with null because I'm an explicit kind of guy.

7
ответ дан 26 November 2019 в 21:41
поделиться

Для таблиц MyISAM значение NULL создает дополнительный бит для каждого столбца NULLABLE (нулевой бит) для каждой строки. Если столбец не имеет значения NULLABLE, дополнительный бит информации никогда не понадобится. Однако он дополняется до 8-битных байтов, поэтому вы всегда получаете 1 + mod 8 байтов для количества столбцов NULLABLE. 1

Текстовые столбцы немного отличаются от других типов данных. Во-первых, для "" запись таблицы содержит двухбайтовую длину строки, за которой следуют байты строки, и представляет собой структуру с вариантной длиной. В случае NULL нет необходимости в информации о длине, но она все равно включается как часть структуры столбца.

В InnoDB, NULL не занимают места: они просто не существуют в наборе данных. То же самое верно и для пустой строки, поскольку смещения данных тоже не существуют. Единственное отличие состоит в том, что для NULL будет установлен бит NULL, а для пустых строк - нет. 2

Когда данные фактически размещены на диске, NULL и '' занимают ТОЧНО ОДИН ПРОСТРАНСТВО в обоих типах данных. Однако при поиске значения проверка на NULL выполняется немного быстрее, чем проверка на «», поскольку вам не нужно учитывать длину данных в своих вычислениях: вы проверяете только нулевой бит.

В результате NULL и '' различия в пробелах, NULL и '' не имеют ВЛИЯНИЯ НА РАЗМЕР, если только столбец не определен как NULLable или нет. Если столбец НЕ ПУСТОЙ, только в таблицах MyISAM вы увидите разницу в производительности (и тогда, очевидно, нельзя использовать значение по умолчанию NULL, поэтому это спорный вопрос).

Настоящий вопрос сводится к прикладной интерпретации столбцов «здесь не задано значение». Если "" является допустимым значением, означающим "пользователь ничего не ввел здесь" или что-то подобное, то предпочтительнее использовать NULL по умолчанию, поскольку вы хотите различать NULL и "" при вводе записи, в которой нет данных.

Обычно тем не менее, значение по умолчанию действительно полезно только для рефакторинга базы данных, когда новые значения должны вступить в силу для старых данных. В этом случае, опять же, выбор зависит от того, как интерпретируются данные приложения. Для некоторых старых данных NULL идеально подходит и лучше всего подходит (столбец раньше не существовал, поэтому теперь он имеет значение NULL!). Для других более подходит "" (часто, когда в запросах используется SELECT *, а NULL вызывает сбой).

В УЛЬТРА-ОБЩИХ УСЛОВИЯХ (и с философской точки зрения) предпочтительнее значение по умолчанию NULL для столбцов NULLABLE, поскольку оно дает наилучшую семантическую интерпретацию «Значение не указано».

1 [ http: / /forge.mysql.com/wiki/MySQL_Internals_MyISAM visible[1234 visible2 [ http://forge.mysql.com/wiki/MySQL_Internals_InnoDB]

54
ответ дан 26 November 2019 в 21:41
поделиться

"" is like an empty box... null is like no box at all.

It's a difficult concept to grasp initially, but as the answers here plainly state - there is a big difference.

0
ответ дан 26 November 2019 в 21:41
поделиться

In general, NULL should indicate data that is not present or has not been supplied, and therefore is a better default value than the empty string.

Sometimes the empty string is what you need as a data value, but it should almost never be a default value.

0
ответ дан 26 November 2019 в 21:41
поделиться

Я предпочитаю значение null, если оно семантически корректно. Если есть поле адреса, и пользователь не заполнил его, я ставлю ему "". Однако если в таблице пользователей есть атрибут адреса, который я еще не предлагал пользователю заполнить, я даю ему NULL.

Я сомневаюсь (но не могу проверить), что NULL и "" имеет большое значение.

1
ответ дан 26 November 2019 в 21:41
поделиться

NULL означает «нет значения» и обрабатывается СУБД, в частности, в отношении предложений where и объединений.

«» означает «пустая строка» и особо не обрабатывается.

Это зависит от того, что представляет собой текст и как он будет фактически использоваться в запросах.

Например, у вас может быть анкета с некоторыми обязательными вопросами и некоторыми дополнительными вопросами.

  • Отклоненные дополнительные вопросы должны иметь NULL в соответствующем столбце.
  • Обязательные вопросы должны иметь пустую строку по умолчанию, потому что они ДОЛЖНЫ быть ответами. (Конечно, в реальном приложении вы бы сказали пользователю ввести что-то, но я надеюсь, что вы уловили идею)
0
ответ дан 26 November 2019 в 21:41
поделиться

Используйте "". Если вы можете утверждать, что столбцы не равны нулю, потребуется меньше усилий по программированию. Разница в пространстве между ними незначительна.

0
ответ дан 26 November 2019 в 21:41
поделиться

'' = ''

0
ответ дан 26 November 2019 в 21:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: