Как внутренне обрабатываются столбцы varchar ядром базы данных? Для столбца, определенного как char (100), СУБД выделяет 100 непрерывных байтов на диске. Однако для столбца, определенного как varchar (100), это, вероятно, не так, поскольку весь смысл varchar состоит в том, чтобы не выделять больше места, чем требуется для хранения фактического значения данных, хранящихся в столбце. Итак, когда пользователь обновляет строку базы данных, содержащую пустой столбец varchar (100), до значения, состоящего, например, из 80 символов, откуда выделяется пространство для этих 80 символов? Кажется, что столбцы varchar должны привести к значительной фрагментации фактических строк базы данных, по крайней мере, в сценариях, где значения столбцов первоначально вставляются как пустые или NULL, а затем обновляются позже с фактическими значениями. Приводит ли эта фрагментация к снижению производительности запросов к базе данных, в отличие от использования значений типа char, где пространство для столбцов, хранящихся в строках, выделяется непрерывно? Очевидно, что использование varchar приводит к меньшему количеству дискового пространства, чем при использовании char, но есть ли снижение производительности при оптимизации производительности запросов, особенно для столбцов, значения которых часто обновляются после начальной вставки?