MyISAM と InnoDB の SELECT パフォーマンスの話

InnoDB は MVCC で遅そうだから読み込み主体の場合は MyISAM とか言うけど、そういう発想の人はそもそも MVCC 不要=複雑なクエリを書かない人なわけで、で、永続的なハッシュとしてしか MySQL を使わないようなケースでは、どのみちプロセス間通信がボトルネックになるので InnoDB でも MyISAM でもパフォーマンスは変わらないんじゃないかと思った。

以下は、250 万件のテーブルからランダムにプライマリキーを指定して読み込んだ場合のパフォーマンス (10万回)。

クエリ MyISAM InnoDB
WHERE id=x 10.4秒 10.7秒
WHERE id>x LIMIT 10 19.8秒 18.1秒

環境は MySQL 5.1.28-rc。チューニングとしては、key_buffer_size, myisam_use_mmap, innodb_buffer_pool_size を指定して、どちらも I/O 極小化、オンメモリ状態で動かしたつもり。

HDD へのアクセスが頻発する場合のベンチマークは、誰か取ってください。設定でいろいろ変わると思うけど。

MyISAM のようなテーブルロック問題もないし、まあ、「とりあえず InnoDB」でダメな理由はないんじゃないかな。