Не имея необходимость переписывать большие блоки, можно использовать Встроенный:: C для преобразования любой единственной, медленной подпрограммы в C. Или непосредственно используйте XS. Также возможно инкрементно преобразовать нижние индексы с XS. PPI/PPI:: XS делает это, например.
, Но перемещающийся в другой язык всегда последнее средство. Возможно, необходимо ли заставить опытного программиста Perl смотреть код? Более вероятно, чем не, (s) он определил бы некоторую особенность, это серьезно повреждает Вашу производительность. Кроме этого, представьте свой код. Помните, нет никакой серебряной пули.
Относительно психо и пирекс: Нет, нет никакого эквивалента для Perl.
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.
Используйте все, что имеет смысл. NULL
означает «нет доступного / указанного значения», «»
означает «пустая строка».
Если вы не разрешаете пустые строки, но пользователю не нужно вводить значение, тогда NULL
имеет смысл. Если вам требуется значение, но оно может быть пустым, NOT NULL
и значение ""
имеет смысл.
И, конечно, если вам не требуется значение, но можно указать пустое значение, тогда NULL
имеет смысл.
С точки зрения эффективности, дополнительный бит используется, чтобы определить, является ли поле NULL
или нет, но не беспокойтесь о такой микрооптимизации, пока не получите миллионы строк.
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.
Для таблиц 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]
""
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.
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.
Я предпочитаю значение null, если оно семантически корректно. Если есть поле адреса, и пользователь не заполнил его, я ставлю ему "". Однако если в таблице пользователей есть атрибут адреса, который я еще не предлагал пользователю заполнить, я даю ему NULL.
Я сомневаюсь (но не могу проверить), что NULL и "" имеет большое значение.
NULL означает «нет значения» и обрабатывается СУБД, в частности, в отношении предложений where и объединений.
«» означает «пустая строка» и особо не обрабатывается.
Это зависит от того, что представляет собой текст и как он будет фактически использоваться в запросах.
Например, у вас может быть анкета с некоторыми обязательными вопросами и некоторыми дополнительными вопросами.
Используйте "". Если вы можете утверждать, что столбцы не равны нулю, потребуется меньше усилий по программированию. Разница в пространстве между ними незначительна.