7.4. Таблиці HEAP
Для HEAP-таблиць використовуються хеш-індекси; ці таблиці зберігаються у пам'яті. Завдяки цьому обробка їх здійснюється дуже швидко, однак у разі збою MySQL буде втрачено всі дані, які зберігалися в них. Тип HEAP дуже добре підходить для тимчасових таблиць!
Для внутрішніх HEAP-таблиць MySQL використовується 100%-ное динамічне хешування без областей переповнення; додатковий простір для вільних списків не потрібний. Відсутні при використанні HEAP-таблиць та проблеми з командами видалення та вставки, які часто застосовуються в хешованих таблицях:
При використанні HEAP-таблиць необхідно звертати увагу на такі моменти:
Необхідно завжди вказувати параметр MAX_ROWS в операторі CREATE , щоб випадково не зайняти всю пам'ять.
Індекси будуть використовуватися тільки з = і (але дуже швидкі).
У таблицях HEAP для пошуку рядка можуть використовуватися тільки повні ключі, в той час як для таблиць MyISAM при пошуку рядків може застосовуватися будь-який префікс ключа.
Для HEAP-таблиць використовується формат із фіксованою довжиною запису.
Для HEAP-таблиць не підтримуються стовпці формату BLOB/TEXT.
Для таблиць HEAP не підтримуються стовпці формату AUTO_INCREMENT .
До версії 4.0.2 для HEAP-таблиць не підтримуються індекси в шпальтах формату NULL.
У HEAP-таблицях можуть зустрічатися ключі, що збігаються (що не є нормою для хешованих таблиць).
HEAP-таблиці використовуються разом усіма клієнтами (як і всі інші таблиці).
Не можна здійснювати пошук наступного запису в порядку прямування (тобто використовувати індекс у команді ORDER BY).
Дані HEAP-таблиць розташовані в невеликих блоках. Таблиці на 100% динамічні (при вставці). Нінеобхідності ні в областях переповнення, ні додаткових ключах. Видалені рядки розміщуються у зв'язаному списку і використовуються при вставці в таблицю нових даних.
Слід подбати про те, щоб була достатня кількість додаткової пам'яті для всіх HEAP-таблиць, які будуть використовуватися одночасно.
Щоб звільнити пам'ять, необхідно запустити команду DELETE FROM heap_table, TRUNCATE heap_table або DROP TABLE heap_table.
MySQL не може підрахувати, скільки рядків знаходиться між двома значеннями (використовується оптимізатором діапазонів для вибору індексу, що використовується). Це може вплинути на деякі запити, якщо конвертувати таблицю MyISAM у формат HEAP .
При створенні розмір таблиці HEAP не може перевищувати max_heap_table_size; це зроблено у тому, щоб забезпечити захист від випадкових некваліфікованих дій.
Кількість пам'яті, необхідної для одного рядка в HEAP-таблиці, обчислюється так:
sizeof(char*) складає 4 на 32-розрядних комп'ютерах та 8 - на 64-розрядних.