MYSQLのインデックスとレコード数と挿入速度の関係
インデックスとレコード数と挿入速度の関係
インデックスとインサートの速度の関係
MYSQLの検索が遅い場合はインデックスを張ることで速くなります
しかし、教科書にはやたらとインデックスを張るなと出てきます
理由としては
(1)インサートが遅くなるから
(2)余分なディスクを使うから
2に関しては今のご時世気にすることは少なくなってきたかと思いますが
それでは、実際にMYSQLにインデックスをはってインサートすると
速度はどのように変化していくのか検証してみました。
検証環境
OS:CentOS6.7 64bit ソフトウェア: MySQL ソフトウェアバージョン: 5.1.73 - Source distribution CPU:ATOM
1.フルテキストインデックスを最大数まで張った場合
インデックスの種類 | 型 | 数 |
---|---|---|
インデックス | INT | 1 |
フルテキストインデックス | TEXT | 63 |
マシンのパワーにもよると思いますが、80万行目あたりから急激に遅くなって120万行目あたりから1インサートに0.7秒かかっています。
2.インデックスを最大数まで張った場合
インデックスの種類 | 型 | 数 |
---|---|---|
インデックス | INT | 1 |
インデックス | VARCHAR(255) | 63 |
マシンのパワーにもよると思いますが、100万行目あたりから急激に遅くなっています、やはりフルテキストインデックスよりかは通常のインデックスのほうが若干遅くなりにくいようですね。
3.インデックスを張らない場合
インデックスの種類 | 型 | 数 |
---|---|---|
インデックス | INT | 1 |
当たり前っちゃ当たり前かもしれませんが、インデックスを張らなければレコード数が増えても特に速度の変化はありませんでした。
まとめ
JOINしてたり、複数のインサートが走ったりと設計にもよると思いますが、
大体80万行くらいに収まるようなアプリケーションであれば気にせずインデックスを張っちゃってもいいのかもしれません。
しかし、それをこえると急激に重くなって一レコード0.7秒と時間がめちゃくちゃかかるようになるので
いろいろと試行錯誤しないといけないってことですな