2013-11-22 11 views
16

MEMORY ENGINE(RAMに格納されたテーブル)を使用しているテーブルについて読んでいました。SELECTとしてのテーブルの作成 - RAMメモリのメモリエンジンを使用して

  • CREATE TABLE AS SELECT構文を使用することが可能ですが、作成したテーブルたちMEMORY ENGINEがありますか?

  • MEMORYテーブルのサイズには制限がありますか?物理的な1.5 GBのテーブルのコピーであるMEMORYテーブルを作成できましたか?

答えて

16
  • はい、それは単純な構文CREATE TABLE t AS SELECT ...で行わはなく、することができます - あなたは、full statementでサンプルをテーブルの列を指定する必要があります。

    CREATE TABLE t (col1 INT(11), col2 INT(11)) 
    ENGINE=MEMORY 
    AS 
    SELECT * FROM another_t 
    
  • デフォルトでは、テーブルの最大サイズ16Mbの場合はmax_heap_table_sizeのサーバーシステム変数で調整できます。ただし、この制限はエンジンあたりであり、 - ではないです。私。すべてのmemoryテーブルがそれを共有します。

    CREATE TEMPORARY TABLE IF NOT EXISTS tmp ENGINE=MEMORY AS (
    SELECT 'abc' As tomcat, 'def' As apache); 
    

    または:個々のテーブルのサイズを制限するには、

    mysql> SET max_heap_table_size = 24*1024*1024; 
    
+4

+1。また、 'max_heap_table'に達すると、テーブルが静かにディスクに書き込まれることを覚えています。 –

+1

"実際の制限は、tmp_table_sizeとmax_heap_table_sizeのどちらの値が小さいかによって決まります。メモリ内のテンポラリテーブルが制限を超えた場合、MySQLは自動的にディスク上のMyISAMテーブルに変換します。 'tmp_table_size'(必要であれば' max_heap_table_size')を実行します。多くの高度な 'GROUP BY'クエリを実行し、たくさんのメモリを持っているとします。 ソース:https://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_tmp_table_size –

6

あなたもこの方法を一時テーブルを作成することができますように、max_heap_table_sizeためセッション値を操作する必要がありますこの方法:

CREATE TEMPORARY TABLE IF NOT EXISTS tmp ENGINE=MEMORY AS (
SELECT tomcat, apache From servers); 

最初のオプションonは2つのカラムをvarchar(3)として作成し、2つ目のオプションは元のテーブルからカラム情報をコメントにもインポートします。