Форматы хранения MyISAM
Двигатель хранения MyISAM поддерживает три разных формата хранения таблиц.
Это FIXED, DYNAMIC и COMPRESSED. FIXED и DYNAMIC можно задать с помощью параметра ROW FORMAT в операторе CREATE TABLE, или они будут выбраны автоматически в зависимости от столбцов, которые содержит таблица. COMPRESSED можно задать только с помощью инструмента myisampack.
Оператор SHOW TABLE STATUS может использоваться для просмотра формата хранения, используемого таблицей. Обратите внимание, что таблицы COMPRESSED отображаются как DYNAMIC в этом контексте.
Форматы фиксированной длины
Таблицы фиксированной длины (или статические) содержат записи фиксированной длины. Длина каждого столбца одинакова для всех записей, независимо от фактического содержимого. Это формат по умолчанию, если таблица не содержит полей BLOB, TEXT, VARCHAR или VARBINARY и не указан параметр ROW FORMAT. Также можно указать таблицу фиксированной длины с ROW_FORMAT=FIXED в определении таблицы.
Таблицы, содержащие поля BLOB или TEXT, не могут быть типа FIXED, так как по своему дизайну они являются динамическими полями. Однако, если вы укажете FIXED, ошибки или предупреждения не будет.
Таблицы фиксированной длины обладают рядом характеристик
- быстрые, поскольку MariaDB всегда знает, где начинается запись
- легко восстанавливаются: myisamchk всегда может восстановить все строки, за исключением последней, если она не была полностью записана
- легко кешируются
- занимают больше места, чем динамические или сжатые таблицы, так как максимальный объем памяти будет выделен для каждой записи
- восстановление после сбоя несложно из-за фиксированных позиций
- нет фрагментации или необходимости реорганизации, если записи не были удалены и вы не хотите освободить место
Динамические
Динамические таблицы содержат записи переменной длины. Это формат по умолчанию, если таблица содержит поля BLOB, TEXT, VARCHAR или VARBINARY и не указан параметр ROW FORMAT. Также можно указать таблицу типа DYNAMIC с ROW_FORMAT=DYNAMIC в определении таблицы. Если таблица содержит столбцы BLOB или TEXT, ее формат всегда DYNAMIC, и параметр ROW FORMAT игнорируется.
Динамические таблицы обладают рядом характеристик
- Каждая строка содержит заголовок, указывающий длину строки
- Строки легко фрагментируются. ОБНОВЛЕНИЕ записи, чтобы она стала длиннее, скорее всего, приведет к тому, что она будет храниться в разных местах на диске. Используйте OPTIMIZE TABLE, когда фрагментация слишком высока.
- Все строковые столбцы длиной четыре символа и более являются динамическими.
- Они требуют гораздо меньше места, чем таблицы фиксированной длины
- Восстановление после сбоя более сложно, чем с таблицами FIXED. Некоторые фрагменты могут быть потеряны.
Если в динамической таблице есть некоторые часто используемые столбцы фиксированной длины, может быть полезно перенести их в отдельную таблицу FIXED, чтобы избежать фрагментации.
Сжатые
Сжатые таблицы — это формат только для чтения, созданный инструментом myisampack. Это можно сделать во время работы сервера, но внешний замок не должен быть отключен. Для их расжатия используется myisamchk.
Сжатые таблицы обладают рядом характеристик:
- хотя данные доступны только для чтения, такие операторы DDL, как DROP TABLE и TRUNCATE TABLE, все еще будут работать
- занимают гораздо меньше места, чем таблицы фиксированной или динамической длины. Обычно коэффициент сжатия данных составляет 40-70%
- строки сжимаются по отдельности, что уменьшает нагрузку на доступ.
- заголовки строк будут иметь размер от одного до трех байт
- строки можно сжимать с помощью различных типов сжатия, включая
- сжатие сжатия префиксов
- сжатие сжатия суффиксов
- столбцы со небольшими наборами значений преобразуются в ENUM
- нулевые значения чисел хранятся только одним битом
- целочисленные столбцы будут уменьшены до самого маленького типа int, который может содержать содержимое
См. также
- Почему нам все еще нужен MyISAM (для таблиц только для чтения) описывает важный случай использования сжатых таблиц MyISAM.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/myisam-storage-formats/