Spec-Zone.ru › MySQL 9.2

18.2 Двигатель хранения MyISAM

  • 18.2.1 Параметры запуска MyISAM
  • 18.2.2 Необходимое место для ключей
  • 18.2.3 Форматы хранения таблиц MyISAM
  • 18.2.4 Проблемы с таблицами MyISAM

MyISAM основан на более старом (и больше недоступном) двигателе хранения ISAM, но имеет много полезных расширений.

Таблица 18.2 Функции двигателя хранения MyISAM

Таблица 18.2 Функции двигателя хранения MyISAM
Функция Поддержка
Индексы B-дерева Да
Резервное копирование/восстановление состояния на определённый момент времени (Реализовано в сервере, а не в двигателе хранения.) Да
Поддержка баз данных кластеров Нет
Кластеризованные индексы Нет
Сжатые данные Да (Сжатые таблицы MyISAM поддерживаются только при использовании сжатого формата строк. Таблицы, использующие сжатый формат строк с MyISAM, доступны только для чтения.)
Кэши данных Нет
Зашифрованные данные Да (Реализовано в сервере через функции шифрования.)
Поддержка внешних ключей Нет
Индексы полнотекстового поиска Да
Поддержка геопространственных типов данных Да
Поддержка индексирования геопространственных данных Да
Индексы хеш-таблиц Нет
Кэши индексов Да
Грань блокировки Таблица
MVCC Нет
Поддержка репликации (Реализовано в сервере, а не в двигателе хранения.) Да
Ограничения хранения 256 ТБ
Индексы T-дерева Нет
Транзакции Нет
Обновление статистики для словаря данных Да

Каждая таблица MyISAM хранится на диске в двух файлах. Файлы имеют имена, начинающиеся с имени таблицы, и расширение, указывающее тип файла. Файл данных имеет расширение .MYD (MYData). Файл индекса имеет расширение .MYI (MYIndex). Определение таблицы хранится в словаре данных MySQL.

Чтобы явно указать, что вы хотите таблицу MyISAM, укажите это с помощью параметра таблицы ENGINE:

CREATE TABLE t (i INT) ENGINE = MYISAM;

В MySQL 9.2 обычно необходимо использовать ENGINE для указания двигателя хранения MyISAM, поскольку InnoDB является движком по умолчанию.

Вы можете проверить или восстановить таблицы MyISAM с помощью клиента mysqlcheck или утилиты myisamchk. Вы также можете сжать таблицы MyISAM с помощью myisampack, чтобы занять намного меньше места. См. Раздел 6.5.3, «mysqlcheck — Программа обслуживания таблиц», Раздел 6.6.4, «myisamchk — Утилита обслуживания таблиц MyISAM» и Раздел 6.6.6, «myisampack — Генерация сжатых, только для чтения таблиц MyISAM».

В MySQL 9.2 движок хранения MyISAM не поддерживает разбиение. Разбитые таблицы MyISAM, созданные в предыдущих версиях MySQL, не могут быть использованы в MySQL 9.2. Дополнительную информацию см. в Разделе 26.6.2, «Ограничения разбиения, относящиеся к двигателям хранения». Для получения помощи по обновлению таких таблиц для использования в MySQL 9.2 см. Раздел 3.5, «Изменения в MySQL 9.2».

Таблицы MyISAM обладают следующими характеристиками:

  • Все значения данных хранятся с младшим байтом вначале. Это делает данные независимыми от машины и операционной системы. Единственными требованиями для двоичной переносимости являются то, что машина использует целые числа со знаком в дополнении до двух и формат чисел с плавающей точкой IEEE. Эти требования широко используются среди основных машин. Двоичная совместимость может быть неприменима к встроенным системам, которые иногда имеют необычные процессоры.

    Нет существенной потери скорости при хранении данных с младшим байтом вначале; байты в строке таблицы обычно не выровнены, и для чтения невыровненного байта в порядке требуется немного больше обработки, чем в обратном порядке. Кроме того, код на сервере, который извлекает значения столбцов, не является критичным по времени по сравнению с другим кодом.

  • Все числовые значения ключей хранятся с старшим байтом вначале, чтобы улучшить сжатие индексов.

  • Поддерживаются большие файлы (длиной до 63 бит) в файловых системах и операционных системах, которые поддерживают большие файлы.

  • В таблице MyISAM ограничение по количеству строк составляет (232)2 (1.844E+19).

  • Максимальное количество индексов на таблицу MyISAM составляет 64.

    Максимальное количество столбцов на индекс составляет 16.

  • Максимальная длина ключа составляет 1000 байт. Это также можно изменить, изменив исходный код и перекомпилировав его. В случае ключа, длина которого превышает 250 байт, используется больший размер блока ключа, чем стандартный 1024 байта.

  • Когда строки вставляются в отсортированном порядке (например, при использовании столбца AUTO_INCREMENT), дерево индекса разбивается таким образом, что узел высокого уровня содержит только один ключ. Это повышает использование пространства в дереве индекса.

  • Внутренняя обработка одного столбца AUTO_INCREMENT на таблицу поддерживается. MyISAM автоматически обновляет этот столбец для операций INSERT и UPDATE. Это ускоряет столбцы AUTO_INCREMENT (по крайней мере, на 10%). Значения в начале последовательности не повторно используются после удаления. (Когда столбец AUTO_INCREMENT определен как последний столбец индекса с несколькими столбцами, повторное использование значений, удаленных из начала последовательности, происходит.) Значение AUTO_INCREMENT можно сбросить с помощью ALTER TABLE или myisamchk.

  • Строки с динамическим размером фрагментируются намного меньше при смешивании удалений, обновлений и вставок. Это делается путем автоматического объединения смежных удаленных блоков и расширения блоков, если следующий блок удален.

  • MyISAM поддерживает одновременные вставки: Если в таблице нет свободных блоков посередине файла данных, можно INSERT новые строки в нее одновременно с чтением из таблицы другими потоками. Свободный блок может возникнуть в результате удаления строк или обновления строки динамической длины с большим количеством данных, чем ее текущее содержимое. Когда все свободные блоки исчерпаны (заполнены), будущие вставки снова становятся одновременными. См. Раздел 10.11.3, “Concurrent Inserts”.

  • Можно поместить файл данных и индексный файл в разные каталоги на разных физических устройствах для повышения скорости с помощью опций таблицы DATA DIRECTORY и INDEX DIRECTORY для CREATE TABLE. См. Раздел 15.1.21, “CREATE TABLE Statement”.

  • BLOB и TEXT столбцы могут быть индексированы.

  • Разрешены значения NULL в индексированных столбцах. Это занимает от 0 до 1 байта на ключ.

  • Каждый символьный столбец может иметь различные наборы символов. См. Главу 12, Наборы символов, сортировки, Unicode.

  • В файле индекса MyISAM есть флаг, указывающий, была ли таблица закрыта корректно. Если mysqld запущен с переменной системы myisam_recover_options, таблицы MyISAM автоматически проверяются при открытии и ремонтируются, если таблица не была закрыта должным образом.

  • myisamchk помечает таблицы как проверенные, если вы запустите его с опцией --update-state. myisamchk --fast проверяет только те таблицы, у которых нет этой метки.

  • myisamchk --analyze хранит статистику для частей ключей, а также для целых ключей.

  • myisampack может упаковывать BLOB и VARCHAR столбцы.

MyISAM также поддерживает следующие функции:

  • Поддержка истинного типа VARCHAR; столбец VARCHAR начинается с длины, хранящейся в одном или двух байтах.

  • Таблицы с столбцами VARCHAR могут иметь фиксированную или динамическую длину строк.

  • Сумма длин столбцов VARCHAR и CHAR в таблице может достигать 64 КБ.

  • Ограничения произвольной длины UNIQUE.

Дополнительные ресурсы

  • Форум, посвященный хранилищу MyISAM, доступен по адресу https://forums.mysql.com/list.php?21.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/myisam-storage-engine.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API