VARCHAR (x) - Превращает ли установка длины в фиксированную длину с точки зрения производительности MySQL? - PullRequest
2 голосов
/ 06 января 2010

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

Однако, что мне неясно, так это то, что, если я даю VARCHAR длину, такую ​​как VARCHAR (500), это сохраняет строку как фиксированную длину?

Для контекста у меня есть чистая таблица с 50 столбцами, в основном TINYINT, но мне нужно два столбца в этой таблице как VARCHAR, так как они должны хранить до 500 символов в каждом. Точная длина зависит от пользовательского ввода и поэтому неизвестна.

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

Любая помощь будет оценена. Спасибо.

Ответы [ 2 ]

6 голосов
/ 06 января 2010

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

mysql> create table t (a varchar(3));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t values ('abc'), ('defgh');
Query OK, 2 rows affected, 1 warning (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 1

mysql> select * from t;
+------+
| a    |
+------+
| abc  |
| def  |
+------+
2 rows in set (0.00 sec)
1 голос
/ 06 января 2010

Нет, он просто устанавливает максимальный размер.

Типы CHAR и VARCHAR объявляются с длиной, указывающей максимальное количество символов, которое вы хотите сохранить. Например, CHAR (30) может содержать до 30 символов.

...