なんかしつこいですがInnoDB vs MyISAMシリーズが続いています。
前回までではPrimaryKey,UniqueIndex、非UniqueIndexで1~数件を取得する
パターンが主ですが今回はそれなりの件数を取得するパターンを試してみます。
測定環境についてはこちらを参照して下さい。
・データ件数は100万件
・こちらの構造のテーブルをInnoDBとMyISAMで作成して処理速度を比較
以下SQL中の「テーブル名 normal」にはMyISAMなら normal2 がセットされます。
6.INDEXで5000件のデータ取得
SELECT name FROM normal WHERE country_id = %d
※%dは1~200でランダムに変化
※country_idは1~200のランダム値で全体が100万件なので、非一意INDEXで5000件のデータを取得します
※取得カラムはINDEX以外
| スレッド数 | MyISAM | InnoDB |
ますます同時スレッド数による性能劣化が緩やかになります。
MyISAMは同時スレッド数を上げても、性能がほとんど変化しません。。
スレッド数2~4くらいはほとんど互角です。
7.100万件テーブルスキャン MINを取得
SELECT min(dob) FROM normal
※MINなのでFullScanの発生は確実
| スレッド数 | MyISAM | InnoDB |
30~40%くらいInnoDBの方が高速です。
同時スレッド数上げても性能劣化が見られません。
というかかえってスループットが若干ですが向上します。
InnoDBとMyISAMの同時スレッドに対するスケーラビリィティの特性が関係が見えてきたような気がします。
次回、もう少し深追いして確認してみたいと思います。





