Rails MySQL ストレージエンジン

MySQLでは、テーブルごとに「テーブル型」を設定できる。これをストレージエンジンと呼ぶ。 ストレージエンジンが違うと、データの格納、取り出しの内部的な処理が変わる。 各々のエンジンに特徴があり、開発者は目的に応じて使い分けるのが望ましい。 ストレージエンジンには、たとえばMYISAMInnoDB、BLACKHOLE、MEMORYといったものがある。 使用できるエンジンは、

mysql> SHOW ENGINES;

で確認できる。ちなみに横長すぎて見づらければ

mysql> SHOW ENGINES\G

とすれば出力形式を縦長にできる。

現在存在するテーブルの型を知りたい場合、

mysql> SHOW TABLE STATUS;

で確認できる。

Railsアプリを作るにあたり、ストレージエンジンを考えてみた。 トラブル時に対応が載っている可能性が高いため、人気なのを使用したい。InnoDBMyISAMに絞られるだろう。 比べてみると、InnoDBトランザクション処理が可能、外部キー制約が使える、クラッシュ時比較的復旧しやすいとのこと。 MyISAMはレコードのカウントが高速、オーバーヘッドが小さいらしい。

Railsの場合、トランザクションをsave,save!,destroyといったメソッドで活用しているらしい。また、アソシエーションで外部キー制約を活用している。さらに、デフォルトでInnoDBのテーブル型を指定している。ならInnoDBでいいかな?

ほとんどのRailsアプリは、InnoDB使っておけばいいんじゃないかなと思った。

以下参考

MySQL :: MySQL 5.6 リファレンスマニュアル :: 15 代替ストレージエンジン

MySQL :: MySQL 5.6 リファレンスマニュアル :: 14.1.1 デフォルトの MySQL ストレージエンジンとしての InnoDB

ja.stackoverflow.com

rorguide.blogspot.jp