Тип Varchar и проблемы с производительностью - PullRequest
1 голос
/ 10 октября 2011

Я моделирую базу данных и хочу спросить о типе Varchar.

Есть ли разница в производительности между Varchar (50) и Varchar (100)?

Например, я получил поле varchar (50), и пользователь сохранил данные 5 символов в этом поле, а другоеПользователь сохранил 25 символов в этом поле.Но никто не сохранил данные 50 символов в этом поле.Поэтому я должен включить это поле varchar (25) для максимальной производительности?

Ответы [ 5 ]

1 голос
/ 10 октября 2011

Длина столбца должна отражать максимальную длину данных, которые ваши пользователи хотят сохранить в этом столбце.Если ваша заявка была разработана на основе хорошо изученных требований, то для такой длины должно быть какое-то оправдание;просто потому, что никто не хранит строки> 25 символов в этом столбце , но не означает, что они когда-нибудь не будут.

Если ответить на другой аспект вашего вопроса, повышение производительности не происходит.быть сделано из сокращения длины колонны.Как и у документов, столбец занимает только хранилище, чтобы соответствовать назначенным данным.Поэтому столбец VARCHAR (100) с только 25 байтами данных не займет больше места, чем столбец VARCHAR (25) с теми же данными. Подробнее .


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

1 голос
/ 10 октября 2011

РЕДАКТИРОВАТЬ: Для MySQL: Нет. По крайней мере, если у вас есть строки из 50-100 символов.

Обычно VARCHAR хранятся как длина + данные;сохраняются только предоставленные данные.Varchar (100) занимает больше байтов для длины (максимум 300 байтов, предполагая utf8 3 байта на символ), но этого недостаточно, чтобы вы заботились.

То же самое для индексов.Это столько, сколько вы действительно храните.

1 голос
/ 10 октября 2011

Для большинства реализаций может существовать несущественная разница в производительности между VARCHAR(50) и VARCHAR(25);вероятно, не стоит об этом беспокоиться.

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

Вот несколько важных обсуждений:
Каковы оптимальные размеры varchar для MySQL?

Из этого обсуждения приведена соответствующая страница справочника MySQL:
http://dev.mysql.com/doc/refman/5.0/en/char.html

1 голос
/ 10 октября 2011

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

1 голос
/ 10 октября 2011

Предполагая SQL Server (поскольку вы также указали MySQL), нет.

Накладные расходы такие же, как и данные в поле.

...