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