MySQLでは、テーブルごとに「テーブル型」を設定できる。これをストレージエンジンと呼ぶ。 ストレージエンジンが違うと、データの格納、取り出しの内部的な処理が変わる。 各々のエンジンに特徴があり、開発者は目的に応じて使い分けるのが望ましい。 ストレージエンジンには、たとえばMYISAM、InnoDB、BLACKHOLE、MEMORYといったものがある。 使用できるエンジンは、
mysql> SHOW ENGINES;
で確認できる。ちなみに横長すぎて見づらければ
mysql> SHOW ENGINES\G
とすれば出力形式を縦長にできる。
現在存在するテーブルの型を知りたい場合、
mysql> SHOW TABLE STATUS;
で確認できる。
Railsアプリを作るにあたり、ストレージエンジンを考えてみた。 トラブル時に対応が載っている可能性が高いため、人気なのを使用したい。InnoDBかMyISAMに絞られるだろう。 比べてみると、InnoDBはトランザクション処理が可能、外部キー制約が使える、クラッシュ時比較的復旧しやすいとのこと。 MyISAMはレコードのカウントが高速、オーバーヘッドが小さいらしい。
Railsの場合、トランザクションをsave,save!,destroyといったメソッドで活用しているらしい。また、アソシエーションで外部キー制約を活用している。さらに、デフォルトでInnoDBのテーブル型を指定している。ならInnoDBでいいかな?
ほとんどのRailsアプリは、InnoDB使っておけばいいんじゃないかなと思った。
以下参考
MySQL :: MySQL 5.6 リファレンスマニュアル :: 15 代替ストレージエンジン
MySQL :: MySQL 5.6 リファレンスマニュアル :: 14.1.1 デフォルトの MySQL ストレージエンジンとしての InnoDB