@rdt09

В этом случае пропадает преимущество от использования строк фиксированной длины?

Насколько я понимаю, основное преимущество строк фиксированной длины перед строками переменной длины состоит в скорости доступа к таким столбцам. Однако вот тут в комментариях пишут:

Note that using CHAR will only speed up your access if the whole record is fixed size. That is, if you use any variable size object, you might as well make all of them variable size. You gain no speed by using a CHAR in a table that also contains a VARCHAR.

Т. е. если хотя бы одно поле в записи является строкой переменной длины, то выигрыша в скорости не будет. В моей таблице есть столбец, который может принимать как короткие значения, так и длинные, поэтому создавать для него фиксированную строку не хочется. Получается, если я сделаю его переменной строкой, то доступ к остальным фиксированным полям станет медленнее, даже если в запросе он не упоминается?
  • Вопрос задан
  • 154 просмотра
Решения вопроса 2
taliban
@taliban
php программист
Для начала уточните кол-во строк в таблице, есть их не так много, то разницы в принципе не будет. А вообще да, если вся строка не имеет фиксированной длины, то эффективность CHAR будет меньше.
Ответ написан
@ollisso
ситуация зависит от типа данных внутри таблицы, и того, какие у вас данные хранятся в фиксированном поле.

Если нет VARCHAR, то все строки имеют фиксированную длину на диске. Т.е. если у вас 1 строка фиксированной длины - 100 байт, то 1000ая строка на диске, имеет позицию 1000 * 100 (условно) Это обычно ускоряет считывание с диска. Как только есть хоть 1 varchar, строки больше не фиксированные - нет никакой оптимизации.

Другой случай - надо знать, что вы храните в данных? Например, если вы там всегда храните 3 значный код, который всегда ровно 3 знака, то CHAR лучше из за того что он требует на 1 байт меньше для хранения, даже если другие столбцы varchar. Внутри VARCHAR - есть дополнительный символ "конец данных", который увеличивает требуемое место на диске. Если же у вас данные не фиксированной длины, т.е. иногда 1, иногда 2, иногда 3 знака - то CHAR не имеет смысла в данном случае - особой экономии нет на диске.

Да, это всё имеет смысл только если у вас ОЧЕНЬ много данных. Для таблиц до 10000 строк особой разницы нет.

Итого:
* CHAR имеет смысл только если у вас строки фиксированной длины, и только если много строк в таблице.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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