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.