昨日の調査結果にあとから追記したのですが、【昨日の調査は MyISAM エンジンでの結果です】! (図らずもそうなってしまいました(^^;))
ということで InnoDB での追試。諸条件は昨日とまったく同じ。 ただしテーブル生成を行う際に、CREATE TABLE文の最後に ENGINE=InnoDB を追加したのみ、です。
MyISAM の結果を見て「やっぱりソートしておいたほうが速い、なるほどね」と思っていた私には、驚くべき結果がでました。
結果(InnoDB)
件数 | unsorted | sorted |
---|---|---|
10,000 | 0.6173 | 0.6070 |
20,000 | 1.1663 | 1.3037 |
50,000 | 2.9893 | 2.9497 |
100,000 | 6.0137 | 6.1367 |
200,000 | 12.4970 | 12.8287 |
300,000 | 19.8357 | 19.8163 |
400,000 | 26.8140 | 28.9463 |
500,000 | 34.0367 | 34.3783 |
600,000 | 42.6510 | 41.8293 |
700,000 | 51.2680 | 51.6237 |
800,000 | 59.9727 | 57.2693 |
感想とか
あらら。MyISAMのときとは打ってかわって、ソート済みと未ソートで差がなくなってしまいました。 InnoDB では MyISAM よりも「かしこい」インデックス構築を行っているのでしょうか。 あるいは InnoDB でのソート済の効果が出るのはもっと大きな件数になってからということなのでしょうか。
ということでこの結果だけから言えるのは【InnoDBでは(この程度の件数では)あらかじめインデックスカラムの値でソートしてからINSERTを流し込んでも、速度的な効果はない】ということになりそうです。
それにしてもきれいにリニアに伸びていますね〜。
おまけ
昨日の MyISAM で事前ソートありのものと、今日のInnoDBでの事前ソートあり、なしの計3つを同じグラフにプロットしてみました。
これを見る範囲では InnoDB と MyISAM でそれほど大きな差はないですね。双方ともかなり最高速まで高速化されていて、ディスクアクセスが律速になっているのかもしれません。
ともあれこの2日間のエントリでわかったのは「MyISAMはインデックスを作っていくのが遅いのかもしれない。大量INSERT時にはちゅうい」ってところでしょうか。 正直なところまだ考察甘いので、みなさんの推測/推察/事実/妄想 などなどいっぱいコメント欄などで聞かせていただければと思います。
以前遊びで測ったデータとか、これからもうちょっと見てみたい項目などがありますので、これからはあまりため込まずにどんどん(考察前でも)まずはデータをこの日記で出して行けたらと思っています。
.