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-розрядних.