2007-04-12
■[mysql]MyISAMとInnoDBの違い
皆さん結構悩んでいるようなので、MyISAMとInnoDBの相違点を表にしてみた。だけど、表にするほど単純な話ではないですね、本当は。
| MyISAM | InnoDB | |
| ロック | テーブルレベル | 行/テーブルレベル |
| トランザクション | なし | ACIDトランザクションをサポート |
| キー圧縮 | あり | なし |
| 全文検索インデックス | あり | なし |
| INSERT DELAYED 構文 | あり | なし |
| クラスタインデックス | なし | あり |
| 物理ファイル | テーブル毎にインデックスとデータファイルがある | インスタンス単位で共通のデータファイルとログファイル*1 |
| インデックスバッファ | key_buffer | innodb_buffer_pool_size |
| データバッファ | OSのブロックバッファ | innodb_buffer_pool_size |
| ログバッファ | なし | innodb_log_buffer_size |
トランザクション指向なら選択の余地なくInnoDB、書き込み処理が支配的な場合もInnoDB、それ以外のときはMyISAM、というのが定番の選び方。あとは、主キーによるクラスタインデックスが使えるので、主キーでの検索が主体のときにInnoDBが良いケースがある。
*1:データファイルはテーブル毎にすることも可能
トラックバック - http://d.hatena.ne.jp/futsu-9/20070412/p2