MEMORY
MEMORYストレージエンジンは、全てのデータをメインメモリ格納します。他のテーブルはディスク上にデータを格納しておきながら、特定のテーブルだけインメモリデータベースとすることができます。MEMORYストレージエンジンと他のストレージエンジンのテーブルをJOINすることも可能です。
デフォルトではインデックスはHASHインデックスとなるため、範囲検索などではインデックスでは利用できません。範囲検索などを行う場合は、BTREEインデックスを明示的に指定する必要があります。
mysql> CREATE INDEX idx_bt USING BTREE ON mem_tbl (id);
テーブルのサイズの上限値はmax_heap_table_sizeで指定できます。なお、TEXT型とBLOB型は利用できません。データはメインメモリ上に格納されるため、サーバの停止時や再起動時にはデータが保持されません。MySQLサーバの起動時にデータをロードする場合は、--init-filesにデータをロードするSQLを記載したファイルを指定します。データの登録や変更時に永続化させるためには、InnoDBなどのテーブルにトリガーを設定しておき、InnoDBのテーブルに登録された内容をMEMORYエンジンにINSERTする方法もあります。
例)永続化したいデータをtest1テーブルのid列とname列にINSERTすると、MEMORYストレージエンジンを使用したmem_tblテーブルのid列とname列にその値が格納されるトリガーを作成する場合
delimiter $$ CREATE TRIGGER bi_mem_tbl BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO mem_tbl (id, name) VALUES (NEW.id, NEW.name); END; $$ delimiter ;