是在内存中还是在磁盘上使用“CREATE TEMPORARY TABLE”创建的表?

时间:2011-09-26 20:21:55

标签: mysql memory disk

MySQL 中,当您创建临时表时,例如CREATE TEMPORARY TABLE ...,该表是在内存中还是在磁盘上创建并保存的?

我已经阅读了文档和谷歌,但没有得到答案。

2 个答案:

答案 0 :(得分:26)

这取决于您指定的引擎。默认情况下,表数据将存储在磁盘上。如果指定MEMORY引擎,则数据将仅存储在内存中。

创建临时表时,应该可以实际找到在文件系统中创建的文件。运行以下命令后:

CREATE TABLE test.table_myisam (x int) ENGINE=MyISAM;
CREATE TABLE test.table_memory (x int) ENGINE=MEMORY;
CREATE TEMPORARY TABLE test.temp_table_myisam (x int) ENGINE=MyISAM;
CREATE TEMPORARY TABLE test.temp_table_memory (x int) ENGINE=MEMORY;

然后我检查了目录:C:\ ProgramData \ MySQL \ MySQL Server 5.5 \ data \ test(在Windows上),存在的文件是:

table_innodb.frm   # Table definition.
table_innodb.MYD   # MyISAM table data file.
table_innodb.MYI   # MyISAM table index file.

table_memory.frm   # No MYD or MYI file for the MEMORY engine.

临时表存储在C:\ Windows \ Temp中,并且具有不寻常的名称,但在内部数据以相同的方式存储。

#sql9a0_7_d.frm    # This is the MyISAM temporary table.
#sql9a0_7_d.MYD    # MyISAM data file for temporary table.
#sql9a0_7_d.MYI    # MyISAM index file for temporary table.

#sql9a0_7_c.frm    # This is the MEMORY engine file. No MYD or MYI.

答案 1 :(得分:4)

像马克所说,这取决于你告诉它使用什么引擎。如果你不给一个引擎,它会做“某事”,但不一定只是在内存中。如果要强制表在内存中,则必须明确定义:

CREATE TEMPORARY TABLE foobar (id int) ENGINE=MEMORY;

但是,MEMORY引擎的使用受到限制。有关详细信息,请查看Internal Temporary Table Use in MySQL