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