MySQLでインデックス設定したらすげー早くなった
知らなくてごめんなさい。こんなこと業務でやってる人とかは当然なんだろうけど。
今までid以外にインデックスを指定してなかったのだけど、別のカラムにインデックスを指定したら5倍くらい速くなった。
処理内容
twitterの発言をMeCabで分割した後、マルコフ連鎖の「現在の単語:次の単語」の組み合わせで保存する(以降この組み合わせの表をマルコフテーブルと呼ぶ)。
保存前に既にその組み合わせがあるかどうかチェック。既にあればその項目のcountに+1する。
スペック
テスト1 既存マルコフテーブル 0件
条件 | 時間[min] | 件数[件] | 時間当たり処理件数[件/min] |
---|---|---|---|
A | 5min | 250 | 50 |
テスト2 既存マルコフテーブル 20万件
条件 | 時間[min] | 件数[件] | 時間当たり処理件数[件/min] |
---|---|---|---|
B | 5 | 150 | 30 |
A | 5 | 30 | 6 |
テスト3 検索速度
検索単語 | 条件A検索時間[sec] | 条件B検索時間[sec] | 結果件数 |
---|---|---|---|
start(開始文字) | 0.35 | 0.16 | 約9000件 |
むきゅー | 0.27 | 0.00 | 1件 |
尚検索の際にはRESET QUERY CACHE;でクエリーキャッシュは消しています。
結論
テスト1と2をみればわかる通り、検索するデータが増えると、インデックスない場合大幅に速度が低下しますね。
あとインデックスを作るとselectの速度も当然あがります。まあ上記の結果は厳密に測定してるわけではないのでばらつきはあるんでしょうが。あとインデックスを作った場合insertはその分遅くなるんでしょうけど、どのくらい遅くなるんでしょう。