MYSQLのインデックスとレコード数と挿入速度の関係

インデックスとレコード数と挿入速度の関係

インデックスとインサートの速度の関係

MYSQLの検索が遅い場合はインデックスを張ることで速くなります

しかし、教科書にはやたらとインデックスを張るなと出てきます

理由としては


(1)インサートが遅くなるから

(2)余分なディスクを使うから


2に関しては今のご時世気にすることは少なくなってきたかと思いますが

それでは、実際にMYSQLにインデックスをはってインサートすると

速度はどのように変化していくのか検証してみました。


検証環境

OS:CentOS6.7 64bit
ソフトウェア: MySQL
ソフトウェアバージョン: 5.1.73 - Source distribution
CPU:ATOM

1.フルテキストインデックスを最大数まで張った場合

インデックスの種類
インデックス INT 1
フルテキストインデックス TEXT 63

fig001

マシンのパワーにもよると思いますが、80万行目あたりから急激に遅くなって120万行目あたりから1インサートに0.7秒かかっています。

2.インデックスを最大数まで張った場合

インデックスの種類
インデックス INT 1
インデックス VARCHAR(255) 63

fig002

マシンのパワーにもよると思いますが、100万行目あたりから急激に遅くなっています、やはりフルテキストインデックスよりかは通常のインデックスのほうが若干遅くなりにくいようですね。

3.インデックスを張らない場合

インデックスの種類
インデックス INT 1

fig003

当たり前っちゃ当たり前かもしれませんが、インデックスを張らなければレコード数が増えても特に速度の変化はありませんでした。



まとめ

JOINしてたり、複数のインサートが走ったりと設計にもよると思いますが、

大体80万行くらいに収まるようなアプリケーションであれば気にせずインデックスを張っちゃってもいいのかもしれません。


しかし、それをこえると急激に重くなって一レコード0.7秒と時間がめちゃくちゃかかるようになるので

いろいろと試行錯誤しないといけないってことですな


  • このエントリーをはてなブックマークに追加
  • Share on Tumblr