Для HEAP-таблиц используются хэш-индексы; эти таблицы хранятся в памяти.
Благодаря этому обработка их осуществляется очень быстро, однако в случае
сбоя MySQL будут утрачены все данные, которые в них хранились. Тип HEAP
очень хорошо подходит для временных таблиц!
Для внутренних HEAP-таблиц в MySQL используется 100%-ное динамическое
хэширование без областей переполнения; дополнительное пространство для
свободных списков не требуется. Отсутствуют при использовании HEAP-таблиц
и проблемы с командами удаления и вставки, которые часто применяются в
хэшированных таблицах:
mysql> CREATE TABLE test TYPE=HEAP SELECT ip,SUM(downloads) AS down
-> FROM log_table GROUP BY ip;
mysql> SELECT COUNT(ip),AVG(down) FROM test;
mysql> DROP TABLE test;
При использовании 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-таблице,
вычисляется следующим образом:
SUM_OVER_ALL_KEYS(max_length_of_key + sizeof(char*) * 2) + ALIGN(length_of_row+1, sizeof(char*))
sizeof(char*) составляет 4 на 32-разрядных компьютерах и 8 - на
64-разрядных.