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-7

    【冬ドラマ】2017年1月期ドラマ、最速情報!!!!

    出典:https://matome.naver.jp/odai/214174024591956100…

ピックアップ記事

  1. 2016-11-8

    女性に嬉しい♪冷え性、生理痛にも効く、万能乾燥生姜の効果と簡単レシピ

    生姜好きガンボです!! でも生姜って買っても1個使い切るのに時間がかかりませんか? 特に1人暮ら…

ピックアップ記事

  1. 2016-11-14

    中目黒おすすめバー特集 Part.1

    中目黒にはオシャレなお店がたくさん。 服や雑貨、レストランだけでなく、 オシャレなバーもたくさんある…
ページ上部へ戻る
Top