2013年6月8日星期六

內存和臨時表

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

既然我已經收到了與博客要求,幫助答案forum.mysql.com問題,我會繼續在這裡發表一些擴展的例子。

我注意到了這一點: http://forums.mysql.com/read.php?10,588192,588192#MSG-588192 ,我首先想到的是用不同的方式來處理這種情況。

如果你需要處理臨時信息表,你可以去了解它在兩個方面。 如果是每會話處理,那麼你應該創建一個臨時表:

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`)
) ;


這將導致NO。FRM文件將消失,關閉會話。
如果你需要它不再需要它要快,你可以​​使用一個MEMORY表。 這將一直保留,直到重新啟動數據庫,刪除表,等..

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;


這又意味著NO。FRM文件。

所以,如果你想要去清理內存中的表,因為你有這麼多東西,你可以找到一個列表以下...
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;


一如往常... 請查看您的需求,什麼工作最適合你和你的應用程序的基準。