なんかしつこいですが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

INDEXで5000件のデータ取得


ますます同時スレッド数による性能劣化が緩やかになります。
MyISAMは同時スレッド数を上げても、性能がほとんど変化しません。。
スレッド数2~4くらいはほとんど互角です。

7.100万件テーブルスキャン MINを取得

SELECT min(dob) FROM normal
※MINなのでFullScanの発生は確実

スレッド数 MyISAM InnoDB

100万件テーブルスキャン MINを取得


30~40%くらいInnoDBの方が高速です。
同時スレッド数上げても性能劣化が見られません。
というかかえってスループットが若干ですが向上します。

InnoDBとMyISAMの同時スレッドに対するスケーラビリィティの特性が関係が見えてきたような気がします。
次回、もう少し深追いして確認してみたいと思います。