在MySQL中,当您创建临时表(例如CREATE TEMPORARY TABLE ...)时,该表是否已创建并保存在内存或磁盘中?

我已经阅读了文档并使用了Google,但没有给出答案。

最佳答案

这取决于您指定的引擎。默认情况下,表数据将存储在磁盘上。如果指定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_innodb.MYD#MyISAM表数据文件。
table_innodb.MYI#MyISAM表索引文件。

table_memory.frm#没有MEMORY引擎的MYD或MYI文件。

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

#sql9a0_7_d.frm#这是MyISAM临时表。
#sql9a0_7_d.MYD#临时表的MyISAM数据文件。
#sql9a0_7_d.MYI#临时表的MyISAM索引文件。

#sql9a0_7_c.frm#这是MEMORY引擎文件。没有MYD或MYI。

09-04 03:08
查看更多