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. 2014/2/27

    人のためのWeb

ピックアップ記事

  1. 2016-7-19

    TV番組を見逃した方必見‼︎【TVer・ティーバー】の魅力

    引用:http://picworld.e-monster.jp/2015/07/21/tverティー…

ピックアップ記事

  1. 2016-9-7

    フリースタイルダンジョンはなぜ流行ったのか??初心者でもわかるラップの楽しみ方!!!!

    引用:http://www.tv-asahi.co.jp/freestyledungeon/ なぜ今…

ピックアップ記事

  1. 2016-11-15

    ずぼらさん必見!簡単ごはん『もぐー』の人気レシピ動画まとめ 〜ごはん編〜

    ずぼらでも簡単においしく作れるレシピまとめ もぐー(mogoo)とは、「かんたん・おいしい・たのし…
ページ上部へ戻る
Top