Hatena::Diary

フツーな日常

2007-04-12

[]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