Spec-Zone .ru
спецификации, руководства, описания, API
|
Формат динамической памяти используется если a MyISAM
таблица содержит любые
столбцы переменной длины (VARCHAR
,
VARBINARY
, BLOB
,
или TEXT
),
или если таблица была составлена с ROW_FORMAT=DYNAMIC
табличная опция.
Динамический формат немного более сложен чем статический формат, потому что у каждой строки есть заголовок, который указывает, какой длины это. Строка может стать фрагментированной (сохраненный в частях состоящих из нескольких несмежных участков), когда это делается более длинным в результате обновления.
Можно использовать OPTIMIZE TABLE
или myisamchk-r, чтобы дефрагментировать таблицу. Если у Вас
есть столбцы фиксированной длины, к которым Вы получаете доступ или часто изменяете в таблице, которая также
содержит некоторые столбцы переменной длины, это могла бы быть хорошая идея переместить столбцы переменной длины
в другие таблицы только, чтобы избежать фрагментации.
У таблиц динамического формата есть эти характеристики:
Все строковые столбцы являются динамичными кроме тех с длиной меньше чем четыре.
Каждой строке предшествует битовый массив, который указывает, какие столбцы
содержат пустую строку (для строковых столбцов) или нуль (для числовых столбцов). Отметьте, что это не
включает столбцы, которые содержат NULL
значения. Если у строкового столбца
есть длина нуля после удаления конечного пробела, или у числового столбца есть значение нуля, это
отмечается в битовом массиве и не сохраняется на диск. Непустые строки сохраняются как байт длины плюс
строковое содержание.
Намного меньше дискового пространства обычно требуется чем для таблиц фиксированной длины.
Каждая строка использует как есть только так много требуемого пространства. Однако,
если строка становится более крупной, она разделяется на так много частей, как требуются, приводя к
фрагментации строки. Например, если Вы обновляете строку с информацией, которая расширяет длину строки,
строка становится фрагментированной. В этом случае Вам, вероятно, придется работать OPTIMIZE TABLE
или myisamchk-r время от времени, чтобы улучшить
производительность. Используйте myisamchk-ei, чтобы получить табличную статистику.
Более трудный чем таблицы статического формата восстановить после того, как катастрофический отказ, потому что строки могут быть фрагментированы во многие части и ссылки (фрагменты), может отсутствовать.
Ожидаемая длина строки для строк динамического размера вычисляется, используя следующее выражение:
3+ (number of columns
+ 7) / 8+ (number of char columns
)+ (packed size of numeric columns
)+ (length of strings
)+ (number of NULL columns
+ 7) / 8
Есть штраф 6 байтов для каждой ссылки. Динамическая строка соединяется всякий раз, когда обновление
вызывает расширение строки. Каждая новая ссылка составляет по крайней мере 20 байтов, таким образом,
следующее расширение, вероятно, входит в ту же самую ссылку. В противном случае другая ссылка
создается. Можно найти число ссылок, используя myisamchk - редактор. Все ссылки могут быть
удалены с OPTIMIZE TABLE
или myisamchk-r.