2011-09-26 12 views

答えて

23

指定するエンジンによって異なります。デフォルトでは、テーブルデータはディスクに保存されます。 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サーバ5.5 \データ\の(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. 
+4

'blackhole'エンジンを指定すると、それは特別なデバイス:/ dev/nullに格納されます。 – Johan

+2

さて、ディスク上では 'temp_table_innodb'と呼ばれることはありません。テンポラリテーブルにはこの1つの接続でしかアクセスできないため、dbへの2つの別々の接続を作成し、それぞれのテンポラリテーブルを作成すると、同じことをして、彼らはお互いに衝突しません。それはすべて、私は彼らがメモリ内にあるかディスク上にあるかどうかはわかりません。私は推測するだろうが、私は間違いなく間違っていると思うので、私はしません。 – Kenny

+0

@ケニー:私はそれらを見つけました...一時フォルダに(もちろん!)。更新された回答をご覧ください。 –

4

Markと同じように、使用するエンジンの種類によって異なります。もしあなたがENGINEを与えなければ、それは「何か」をするでしょうが、必ずしもそれを記憶に入れる必要はありません。あなたがメモリにあるように、テーブルを強制したい場合は、それを明確に定義する必要があります。

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

しかし、MEMORY-エンジンの使用が制限されています。詳細はhttp://dev.mysql.com/doc/refman/5.5/en/internal-temporary-tables.htmlをご覧ください。

+2

ユーザ作成のメモリテンポラリテーブルはmax_heap_table_sizeで制限され、内部のテンポラリテーブルとは異なり、/ onの場合はオンディスクの一時テーブルに変換されません(少なくともMySQL 5.1.63では)彼らはあまりに大きく成長する。より多くのデータを挿入すると、エラーが発生します。上記の –

+2

は、明示的なテンポラリテーブルではなく、内部のテンポラリテーブル(SQLクエリを実行するために生成されたもの)用です。 –

関連する問題