Y's note

Web技術・プロダクトマネジメント・そして経営について

本ブログの更新を停止しており、今後は下記Noteに記載していきます。
https://note.com/yutakikuchi/

MyISAM,InnoDBについて

イメージ

MyISAM:検索が速い。InnoDB : 障害に強い。こんなイメージしかありませんでしたが、勉強もかねて性能の違いをまとめていきたいと思います。

メリデメ

MyISAMのメリット
  • 参照系処理が高速。
  • 全文検索可能。
  • 参照テーブルの圧縮。
MyISAMのデメリット
  • 更新系処理が重い?
  • テーブルロックをかけるので、複数のクライアントからの同時更新でロックが発生する。
  • 外部KEY制約を使うことが出来ない。
  • リカバリが面倒。
InnoDBのメリット
  • トランザクションが使えるので、リカバリが楽。
  • 行ロックを行うので更新/参照の競合が限定的になる。
  • 外部KEY制約を設けることが可能。
  • オンラインバックアップ可能。
  • インデックスの更新/再構築が効率化。
  • 主KEYがクラスタインデックスなので、主KEYでの検索が高速。
InnoDBのデメリット
  • データサイズがMyISAMに比べて大きくなるのでその分ディスク容量が必要。
  • 参照処理がMyISAMに比べて遅い。

余程のことが無い限り全文検索や参照テーブルの圧縮といったことは行わないはずなので、MyISAMのみの性能を重視するメリットは正直薄いのかなと思います。またInnoDBのメリット/デメリットの項目を見ても利用する価値はInnoDBの方が高いと言えそうです。今後はInnoDBを使いましょう。参照する場合のポイントはクラスタインデックスの利用などでしょうか。自分は思いつかなかったのですが、マスターをInnoDBで、スレーブをMyISAMで構築したらいいという話があるようなのですが、http://opendatabaselife.blogspot.com/2009/08/innodbmyisam.html こちらのサイトでロックの観点/スレーブからマスターへ移すときの難点が書かれています。