Важность varchar длины в таблице MySQL

У меня есть таблица MySQL, где строки вставляются динамично. Поскольку я не могу быть уверен в длине строк и не хочу их отключенный, я делаю их varchar (200), который обычно намного больше, чем мне нужно. Существует ли большая производительность, пораженная в предоставлении varchar поля намного большей длины, чем необходимый?

104
задан OMG Ponies 26 December 2009 в 07:53
поделиться

6 ответов

Нет, в том смысле, что если значения, которые вы храните в этом столбце, всегда (скажем) меньше 50 символов, то объявив столбец varchar(50) или varchar(200), вы получите ту же производительность.

.
58
ответ дан 24 November 2019 в 04:02
поделиться

Есть одно возможное влияние на производительность: в таблицах MySQL временные таблицы и MEMORY хранят столбец VARCHAR в виде столбца фиксированной длины, с прокладкой до его максимальной длины. Если столбцы VARCHAR имеют гораздо больший размер, чем необходимо, то потребляется больше памяти, чем требуется. Это влияет на эффективность кэширования, скорость сортировки и т.д.

.
286
ответ дан 24 November 2019 в 04:02
поделиться

Performance? Нет. Хранение на диске? Да, но это дешево и обильно. Если только ваша база данных не вырастет до терабайтного масштаба, скорее всего, с вами все в порядке.

5
ответ дан 24 November 2019 в 04:02
поделиться

VARCHAR идеально подходит для описываемой вами ситуации, потому что он обозначает "переменный символ" - предел, по вашему примеру, будет составлять 200 символов, но меньше принимается и не будет заполнять отведенный размер столбца.

VARCHAR также занимает меньше места - значения хранятся в виде префикса длиной в один или два байта плюс данные. Префикс длины указывает количество байтов в значении. В столбце используется один байт длины, если для значений требуется не более 255 байтов, и два байта длины, если для значений может потребоваться более 255 байтов.

Более подробную информацию о сравнении MySQL CHAR и VARCHAR типов данных см. в по этой ссылке.

.
14
ответ дан 24 November 2019 в 04:02
поделиться

Хиты производительности могут быть - но обычно не на том уровне, который заметит большинство пользователей.

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

Не приводит ли варвар к падению производительности из-за фрагментации данных?

Еще лучше, char против vs varchar.

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

.
1
ответ дан 24 November 2019 в 04:02
поделиться

Будучи варчаром, а не просто char, размер основывается на внутреннем поле для указания его реальной длины и самой строки. Таким образом, использование varchar(200) не сильно отличается от использования varchar(150), за исключением того, что у вас есть потенциал хранить Больше.

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

0
ответ дан 24 November 2019 в 04:02
поделиться
Другие вопросы по тегам:

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