sqlでupdate文を10倍高速にしたいときは、ここを見直せ!

sqlでupdate文を高速化するときに見直すべきポイント

レコード数が少ないときは、まったく気になってなかったのですが、
1万件、10万件、、、、と増えてきたときになんか違和感。。。

気づいたら、10万件の中の一部のレコードにupdate文かけるだけでも
10分以上時間がかかっている。

Why!?
it takes too much time !!!!!!
I can’t wait !!!!!!!!!!!

というわけで、すごく悩んだのですが、
その時に、見直したupdate文のポイントをご紹介します!

update文が遅い原因

そもそもなぜupdate文が遅いのかというと、
selectしてから、レコードの更新を行うから。
ということは、
select文を高速化できれば、
update文も高速化するのではないかという観点で
見直してみました。

ポイント①:インデックスの見直し

update文の検索キーになるカラムにインデックスをはる。
レコード数が少ないときは、インデックスは、特に効果は発揮しませんが、
10万件となれば話は別!
検索キーになるカラムにインデックスをはりましょう!
インデックスをはることで、なぜ、高速化につながるかの詳細は、こちらから。
インデックス数が多い、またはデータサイズが大きいカラムにインデックスを
はると遅くなる可能性もあるらしいので、ご注意を。

ポイント②:update文のwhere句の見直し

今回の解決方法は、これでした。
インデックスもちゃんとはってあったし、何でだろうと悩んでいたのですが、
これだけで本当に高速になりました。

where句に、より条件を追加して、検索対象にしないレコードを増やす!!!

これなんです。
考えてみれば、当たり前といえば当たり前なのですが、
意外にもスパっと抜けてました。

具体的には、

というのがあったとします。
このupdate文は、record_id = 70101 のもののカラムを更新するということなのですが、
このwhere句だけだと10万件のレコードを全てみていって、record_id = 70101 に一致する
カラムを更新することになります。

なので、例えば、レコードの有効、無効を判定するフラグ available_flg なるものが
あったとして、有効なレコードのみが対象だったりすれば、それをwhere句に追加する。

こうすることで、update文の実行の際に、検索対象のレコードを絞ることができて、
高速化につながります。

update文で、極力、where句に条件を指定するようにしたことで、
もともと10分以上かかっていたものが、30秒ほどで完了するようになりました。

最後に

ほんとにsqlは、書き方で全然実行時間がかわってきます。
update文、select文は、特に!!!

もし、お悩みの方がいらっしゃったら、
インデックス、where句を見直してみるのがいいかもしれないです(^o^)

関連記事

コメントは利用できません。

ピックアップ記事

  1. 2016-12-26

    今回はどのドラマが選ばれる!?!?ザテレビジョンドラマアカデミー賞!!!

    出典:https://thetv.jp/feature/drama-academy/list/fuj…

ピックアップ記事

  1. 2016-9-28

    アレンジ豊富!自宅で簡単おいしい!ジュースのような日本酒サングリア♪美肌効果も◎

    果物の季節がやってきました! 昨年ブームになった日本酒サングリア。 今年も梨だけでなく様々なフル…

ピックアップ記事

  1. 2016-11-16

    れんこんサミットって何!?11月17日はレンコン記念日!今夜はレンコン料理で決まり!!

    みなさん、今日が何の日かご存知ですか!?そう、今日は!!レンコンの日!!!!です!!!!レンコンの日…
ページ上部へ戻る
Top