Tabeals HEAP usam índices hash e são
armazenadas na memória. Isto as torna muito rápidas, mas se o
MySQL falhar você irá perder todos os dados armazenados nela.
HEAP é muito útil para tabelas temporárias!
As tabelas HEAP do MySQL utilizam hashing 100%
dinâmico sem áreas em excesso. Não há espaços extras
necessários para listas livres. Tabelas HEAP
também não têm problemas com deleção + inserção, o que
normalmente é comum em tabelas com hash:
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;
Aqui seguem algumas coisas que você deve considerar ao utilizar
tabelas HEAP:
Você sempre deve utilizar a especificação
MAX_ROWS na instrução
CREATE para assegurar que você não irá
utilizar toda a memória acidentalmente.
Índices só serão utilizados com = e
<=> (mas é MUITO rápido).
Tabelas HEAP só podem usar chaves inteiras
para procurar por uma linha; compare isto a tabelas
MyISAM onde qualquer prefixo de chave pode
ser usada para encontrar linhas.
Tabelas HEAP usam um formato de registro de
tamanho fixo.
HEAP não suporta colunas
BLOB/TEXT.
HEAP não suporta colunas
AUTO_INCREMENT.
Antes do MySQL 4.0.2, HEAP não suportava
um índice em uma coluna NULL.
Você pode ter chaves não únicas em uma tabela
HEAP (isto não é comum em tabelas com
hash).
Tabelas HEAP são compartilhadas entre
todos os clientes (como qualquer outra tabela).
Você não pode pesquisar pela próxima entrada na ordem (isto
é, usar o índice para fazer um ORDER BY).
Dados de tabelas HEAP são alocados em
blocos menores. As tabelas são 100% dinâmicas (na
inserção). Não são necessárias areas excessivas e espaço
de chave extra. Linhas deletadas são colocadas em uma lista
encadeada e são reutilizadas quando você insere novos dados
na tabela.
Você precisa de memória extra suficiente para todas as
tabelas HEAP que você quiser utilizar ao
mesmo tempo.
Para liberar memória, você deve executar DELETE
FROM tabela_heap, TRUNCATE
tabeala_heap ou DROP TABLE
tabela_heap.
O MySQL não pode descobrir aproximadamente quantas linhas
existem entre dois valores (isto é utilizado pela atimizador
de escala para decidar qual indice usar). Isto pode afetar
algumas consultas se você alterar uma tabela
MyISAM para uma tabela
HEAP.
Para assegurar que você não vai cometer nenhum erro
acidentalmente, você não pode criar tabelas
HEAP maiores que
max_heap_table_size.
A memória necessária para uma linha na tabela
HEAP é:
SUM_OVER_ALL_KEYS(max_length_of_key + sizeof(char*) * 2) + ALIGN(length_of_row+1, sizeof(char*))
sizeof(char*) é 4 em uma máquina de 32 bits e
8 em uma máquina de 64 bits.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
