поля varchar - сила двух более эффективна? - PullRequest
48 голосов
/ 27 февраля 2009

Является ли более эффективным использование поля varchar размером как степень двух против другого числа? Я думаю, нет, потому что для SQL Server по умолчанию 50.

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

Итак, имеет ли поле, объявленное как varchar(32) или varchar(64), реальное преимущество над varchar(50)?

Ответы [ 5 ]

48 голосов
/ 27 февраля 2009

номер

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

Единственное значение размера двух, относящееся к VARCHAR, касается точного типа varchar (или TEXT / BLOB в некоторых диалектах SQL): если он меньше 256, он может использовать один байт для указания длины. если оно меньше 65536 (64 КБ), достаточно двух байтов, три байта работают до 16777216 (16 МБ), четыре байта переходят к 4294967296 (4 ГБ).

Кроме того, можно утверждать, что VARCHAR(50) столь же дорог, как и VARCHAR(255), так как для обоих потребуется n + 1 байт памяти.

Конечно, это прежде, чем думать о Юникоде ...

27 голосов
/ 27 февраля 2009

Я всегда думал, что люди выбирают полномочия двух для полей varchar, потому что мы гики и именно это мы и делаем. По крайней мере, так я всегда делал.

4 голосов
/ 27 февраля 2009

для SQL вообще? Нет. Для конкретной реализации, может быть.

Что является более эффективным, определяется не спецификацией (SQL является просто спецификацией), а тем, как она реализована в определенной СУБД.

4 голосов
/ 27 февраля 2009

Единственное ощутимое преимущество, которое вы получите от использования максимальной длины, - это место для хранения, необходимое для VARCHAR. Максимальная длина более 255 потребует дополнительного байта для хранения длины значения в каждой строке (и дополнительные 2 байта для длины 256 ^ 2 или более и т. Д.).

0 голосов
/ 27 февраля 2009

Это зависит от конкретной реализации базы данных, но я не ожидаю этого. Как правило, он не выполняет никаких вычислений количества символов, поэтому не должен влиять на производительность - только пробел.

...