Ответ 1
Разница действительно имеет значение только для MyISAM, другие механизмы хранения не заботятся о разнице. ОБНОВЛЕНИЕ: Многие пользователи отметили, что InnoDB действительно заботится: ссылка 1 -, ссылка 2 - Каан.
С MyISAM с фиксированной шириной строк, есть несколько преимуществ:
Нет фрагментации строк: с помощью строк переменной ширины можно разделить отдельные строки на несколько разделов в файле данных. Это может увеличить поиск диска и замедлить работу. Его можно дефрагментировать с помощью OPTIMIZE TABLE, но это не всегда практично.
Размер указателя на файл данных: в MyISAM существует концепция указателя на файл данных, который используется, когда ему необходимо обратиться к файлу данных. Например, это используется в индексах, когда они ссылаются на то, где на самом деле присутствует строка. При фиксированных размерах ширины этот указатель основан на смещении строк в файле (т.е. строки равны 1, 2, 3 независимо от их размера). С переменной шириной указатель основан на байтовом смещении (то есть строки могут быть 1, 57, 163). В результате этого для больших таблиц указатель должен быть больше, что потенциально добавляет к таблице намного больше накладных расходов.
Проще исправить в случае коррупции. Поскольку каждая строка имеет одинаковый размер, если ваша таблица MyISAM повреждена, ее гораздо легче восстановить, поэтому вы потеряете только те данные, которые действительно повреждены. С переменной шириной теоретически возможно, что указатели переменной ширины будут испорчены, что может привести к неправильному переносу данных.
Теперь основным недостатком фиксированной ширины является то, что она тратит больше места. Например, вам нужно использовать поля CHAR вместо полей VARCHAR, чтобы в итоге было занято дополнительное пространство.
Как правило, у вас не будет большого выбора в формате, так как он продиктован на основе схемы. Тем не менее, это может быть полезно, если у вас есть только несколько varchar или один большой двоичный объект/текст, чтобы попытаться оптимизировать это. Например, рассмотрите возможность переключения единственного varchar на символ или разбейте большой двоичный объект на его собственную таблицу.
Вы можете прочитать больше об этом на: