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秒と時間がめちゃくちゃかかるようになるので
いろいろと試行錯誤しないといけないってことですな
関連する記事
【2023年2月更新版】Shopify(ショピファイ)のCSVの仕様
Shopify(ショピファイ)のCSVの仕様は以下の通りです 各商品について、それが単一の商品か、バリエーションのある商品かを判断する必要があります。 単一の商品: 単一の商品にはバリエーションが含まれていません。バリエーションのない商品を…
WSLでTensorFlow with Keras をインストール
WSLにTensorFlowをインストール まずは必要なソフトウェアをインストールしていきます pyenv pyenvはpythonのバージョンを管理してくれたりするツールです、2系とか3系とかも簡単に切り替えられたりします。 以下のコマン…
PHPでpuppeteerを動かせるPuPHPeteerのよくある記述方法一覧
PHPでpuppeteerを動かせるPuPHPeteer https://github.com/nesk/puphpeteer プログラムに関してはこちら、詳細に関しては説明しているサイトがたくさんあるので割愛 以下のようなエラーになる F…
windows10上のUBUNTUでgoogle chromeをプログラム制御自動化してみる
windows10上のUBUNTUでgoogle chromeをプログラム制御してみる Windows 10 バージョン1709(Windows 10 Fall Creators Update、ビルド16299)以降Windows10でLi…
windows10のWSLでApache2のmod_rewriteを有効にするやり方
windows10のWSL Apache2のmod_rewriteを有効にするやり方 .htaccessを設定してもURLの書き換えが出来ない場合モッズリライトが有効になっていない可能性があります(2018/05/24時点では有効ではありま…
windows10のWSL機能を使ってCドライブ直下のPHPをプレビューできるようにする
windows10標準機能でPHPをプレビューしよう Windows 10 バージョン1709(Windows 10 Fall Creators Update、ビルド16299)以降Windows10でLinuxを実行することができるWSL…


