web-dev-qa-db-ja.com

"CREATE TEMPORARY TABLE"を使用してテーブルはメモリ内またはディスク上に作成されますか?

MySQLの場合、一時テーブルを作成すると、たとえばCREATE TEMPORARY TABLE ...、そのテーブルは作成され、メモリまたはディスクに保持されていますか?

私はドキュメントを読み、Googleがそれを読んだのですが、答えはわかりません。

25
Nate Weiner

指定するエンジンによって異なります。デフォルトでは、テーブルデータはディスクに保存されます。 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なし。
27
Mark Byers

マークが言ったように、それはあなたがどのエンジンに使用するように言うかに依存します。 ENGINEを指定しない場合、「何か」を実行しますが、必ずしもメモリ内に保持するだけではありません。テーブルを強制的にメモリ内に置く場合は、明示的に定義する必要があります。

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

ただし、MEMORYエンジンの使用は制限されています。詳細については、 MySQLでの内部一時テーブルの使用 を参照してください。

4