Поля varchar — степень двойки более эффективна?

StackOverflow https://stackoverflow.com/questions/593364

  •  09-09-2019
  •  | 
  •  

Вопрос

Эффективнее ли использовать varchar поле размером в степень двойки vs.другой номер?Я думаю нет, потому что для SQL Server значение по умолчанию — 50.

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

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

Это было полезно?

Решение

Нет.

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

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

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top