Nat*_*ner 23 mysql memory disk
在MySql中,当您创建临时表时,例如"CREATE TEMPORARY TABLE ...",该表是在内存中还是在磁盘上创建并保存的?
我已经阅读了文档和谷歌,但没有得到答案.
Mar*_*ers 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;
Run Code Online (Sandbox Code Playgroud)
然后我检查了目录: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.
就像马克说的,这取决于你告诉它使用什么 ENGINE。如果您不提供 ENGINE,它会做“某事”,但不一定将其保留在内存中。如果要强制该表在内存中,则必须明确定义它:
CREATE TEMPORARY TABLE foobar (id int) ENGINE=MEMORY;
Run Code Online (Sandbox Code Playgroud)
但是,内存引擎的使用受到限制。有关更多信息,请查看MySQL中的内部临时表使用。
| 归档时间: |
|
| 查看次数: |
34165 次 |
| 最近记录: |