sexta-feira, 7 de junho de 2013

MEMÓRIA e tabelas temporárias

Original post: http://anothermysqldba.blogspot.com/2013/06/memory-and-temporary-tables.html

Desde que eu tenha recebido um pedido de ajuda para responder a perguntas forum.mysql.com com o blog vou continuar a postar alguns exemplos estendidos aqui.

Notei este post: http://forums.mysql.com/read.php?10, 588192,588192 # msg-588192 e eu pensava de uma maneira diferente de lidar com a situação.

Se você precisa de tabelas para lidar com informações temporárias você pode fazê-lo de duas maneiras. Um se for por processamento sessão, então você deve criar apenas uma tabela temporária:

CREATE TEMPORARY TABLE `temporary_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ;


Isto irá resultar em nenhuma frm. E vai embora e fechar a sessão.
Se você precisar dele mais tempo disponível e precisa que ele seja rápido, você pode usar uma tabela MEMORY. Isso vai ficar até que você reiniciar banco de dados, excluir a tabela, etc ..

CREATE TABLE `memory_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MEMORY;


Isso significa que mais uma vez nenhum arquivo. Frm.

Então, se você quer ir limpar as mesas de memória até porque você tem tantos ou algo que você pode encontrar uma lista com o seguinte ...
SELECT TABLE_SCHEMA, ENGINE, COUNT(*) AS count_tables,
SUM(DATA_LENGTH+INDEX_LENGTH) AS size,
SUM(INDEX_LENGTH) AS index_size FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA NOT IN ('mysql', 'INFORMATION_SCHEMA')
AND ENGINE = "MEMORY" GROUP BY TABLE_SCHEMA, ENGINE;


Como sempre ... rever as suas necessidades e de referência que funciona melhor para você e para a sua aplicação.