Задать вопрос
podust
@podust

SQL: Какая разница между varchar(200) и varchar(20000) в плане потребления ресурсов?

Всегда было интересно, но пока нигде не встречал замечаний на эту тему. Какая фактическая для MySQL (или может быть всех SQL-подобных?) разница между, например, полем varchar(20) и varchar(20 000)? С точки зрения потребления ресурсов, эффективности и всего такого? Резервируется ли системой каким-то образом какое-то пространство под эти самые 20 000 символов? Или же просто ставится некий флажок о степени "резиновости" поля?

То есть, сильная ли будет разница по эффективности/потреблению памяти и прочих ресурсов между этими случаями?:

1. Запись одного слова из 5 символов в поле длиной 64 000 символов.
2. Запись одного слова из 5 символов в поле длиной в 5 символов.
  • Вопрос задан
  • 4294 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@SilverSlice
"Сохранение значения ‘hello’ требует одинакового пространства и в столбце типа VARCHAR(5), и в столбце типа VARCHAR(200). Есть ли преимущество в использовании более короткого столбца?
Оказывается, преимущество есть, и большое. Для столбца большей размерности может потребоваться намного больше памяти, поскольку MySQL часто выделяет для внутреннего хранения значений участки памяти фиксированного размера. Это особенно плохо для сортировки или операций, использующих временные таб­лицы в памяти. То же самое происходит при файловых сортировках, использующих временные таб­лицы на диске.
Наилучшей стратегией является выделение такого объема памяти, который действительно нужен." Источник
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
A variable-length string. M represents the maximum column length in characters. In MySQL 5.0, the range of M is 0 to 255 before MySQL 5.0.3, and 0 to 65,535 in MySQL 5.0.3 and later. The effective maximum length of a VARCHAR in MySQL 5.0.3 and later is subject to the maximum row size (65,535 bytes, which is shared among all columns) and the character set used. For example, utf8 characters can require up to three bytes per character, so a VARCHAR column that uses the utf8 character set can be declared to be a maximum of 21,844 characters. See Section D.7.4, “Limits on Table Column Count and Row Size”.

MySQL stores VARCHAR values as a 1-byte or 2-byte length prefix plus data. The length prefix indicates the number of bytes in the value. A VARCHAR column uses one length byte if values require no more than 255 bytes, two length bytes if values may require more than 255 bytes.
dev.mysql.com/doc/refman/5.0/en/string-type-overvi...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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