7.1. Таблиці MyISAM

Тип таблиць MyISAM прийнятий за умовчанням у MySQL версії 3.23. Він ґрунтується на коді ISAM і має в порівнянні з ним велику кількість корисних доповнень.

Індекс зберігається у файлі з розширенням .MYI (MYIndex), а дані - у файлі з розширенням .MYD (MYData). Таблиці MyISAM можна перевіряти/відновлювати за допомогою утиліти myisamchk. Розділ 4.4.6.7, «Використання myisamchk для післяаварійного відновлення». Таблиці MyISAM можна стискати за допомогою команди myisampack, після чого вони займатимуть набагато менше місця. Розділ 4.7.4, « myisampack , MySQL-генератор стислих таблиць (тільки для читання)».

Нововведення, якими володіє тип MyISAM:

Прапор у файлі MyISAM , який вказує, чи правильно була закрита таблиця чи ні. У разі запуску mysqld з параметром --myisam-recover таблиці MyISAM будуть автоматично перевірятися та/або відновлюватися під час відкриття, якщо таблиця була закрита неправильно.

За допомогою команди INSERT можна вставляти нові рядки в таблицю, всередині файлу даних якої немає вільних блоків, тоді як інші потоки зчитують інформацію з таблиці (сумісна вставка). Вільний блок може бути отриманий при оновленні рядка з динамічною довжиною, коли більша кількість даних замінюється меншою кількістю або видалення рядків. Коли вільних блоків не залишається, всі наступні блоки знову вставлятимуться як суміщені.

Підтримує великі файли (63 біти) у файлових/операційних системах, які підтримують великі файли.

Зберігання всіх даних здійснюється з першим молодшим байтом. Це робить дані незалежними від операційної системи. Єдина вимога - у комп'ютері повинні застосовуватися доповнені до двох байтів цілі числа зі знаком (як і у всіх комп'ютерахостанні 20 років) і формат із плаваючою одиничною комою IEEE (також використовується в переважній більшості серійних комп'ютерів). Єдиними комп'ютерами, які можуть не підтримувати бінарну сумісність, є вбудовані системи (оскільки в них іноді використовуються спеціальні процесори). При зберіганні даних із першим молодшим байтом немає зниження швидкості. Зазвичай байти у рядку таблиці не вирівняні і немає великої різниці у тому, як прочитати невирівняний байт - у прямій послідовності чи зворотній. Фактичний час отримання значення стовпця також не критично в порівнянні з часом виконання решти коду.

Усі ключі номерів зберігаються з першим старшим байтом, щоб стиснення індексів було ефективнішим.

Внутрішня обробка стовпця AUTO_INCREMENT. MyISAM автоматично оновлює його під час виконання команд INSERT/UPDATE. Значення AUTO_INCREMENT може бути обнулено оператором myisamchk. Після цього стовпець AUTO_INCREMENT буде швидшим (принаймні на 10%) і старі номери не будуть повторно використовуватися, як зі старим ISAM . Зверніть увагу: коли AUTO_INCREMENT встановлено в кінці ключа, стара поведінка все ще зберігається.

При вставці у відсортованому порядку (як при використанні стовпця AUTO_INCREMENT ) дерево ключів буде розділене таким чином, щоб верхній вузол містив лише один ключ. При цьому скорочується витрата простору пам'яті у дереві ключів.

Стовпці BLOB та TEXT можуть бути проіндексовані.

У індексних стовпцях дозволено значення NULL. Вони займають 0-1 байт на ключ.

За замовчуванням максимальна довжина ключа становить 500 байт (це значення може змінюватися при повторній компіляції). У випадках, коли ключі більше 250 байт, для них використовуються великірозміри блоку ключа, ніж передбачені за умовчанням 1024 байти.

За замовчуванням у таблиці може бути не більше 32 ключів. Це значення можна збільшити до 64 без повторної компіляції myisamchk.

myisamchk відзначатиме таблиці як перевірені, якщо вони запускаються з параметром --update-state . myisamchk --fast перевірятиме лише ті таблиці, в яких відсутня дана позначка.

myisamchk -a зберігає статистичні дані по частинах ключа (не тільки для ключів цілком, як у ISAM).

Рядки з динамічним розміром будуть менш фрагментованими, ніж при змішуванні видалень із оновленнями та вставками. Це здійснюється шляхом автоматичного поєднання віддалених суміжних блоків та розширенням блоків, якщо наступний блок вилучений.

myisampack може упаковувати стовпці BLOB і VARCHAR.

Можна помістити файл даних та файл індексів у різні каталоги, щоб збільшити швидкість (з параметром DATA/INDEX DIRECTORY="path" для CREATE TABLE ). Розділ 6.5.3, «Синтаксис оператора CREATE TABLE».

MyISAM також підтримує такі функції, які можна буде використовувати у MySQL у найближчому майбутньому:

Підтримка типу VARCHAR; Стовпець VARCHAR починається з довжини, яка зберігається в 2 байтах.

Таблиці VARCHAR можуть мати фіксовану або динамічну довжину записів.

VARCHAR та CHAR можуть бути до 64 Кб довжиною. Усі ключові сегменти мають власні визначення мови. Це дозволяє задавати MySQL різні визначення мови для кожного стовпця.

Для UNIQUE можна використовувати обчислений хеш-індекс. Це дозволяє використовувати UNIQUE з будь-яким поєднанням стовпців у таблиці (проте не можна здійснювати пошук за обчисленим UNIQUE індексом).

Зверніть увагу, що індексні файли привикористання MyISAM зазвичай набагато менше порівняно з ISAM. Це означає, що для MyISAM зазвичай використовується менше системних ресурсів, ніж для ISAM , але більше завантажується процесор при вставці даних у стислий індекс.

Нижче наведені параметри mysqld можуть використовуватися для зміни поведінки таблиць MyISAM . See Розділ 4.5.6.4, "SHOW VARIABLES".