[Mysql]重いINSERTやUPDATEのサブクエリでSELECTしてるテーブルがロックされて書き込めないのが困る時はテンポラリテーブルを使いましょう

受け継がれた秘伝のソース(IT企業)ネタには「やめろおお」と言ってしまいますが、SQLってサブクエリでSELECTして、GROUP BYの制約で更にサブクエリでWHEREで絞って、絞った物を更にINNER JOINとかしつつUPDATEとかして酷い事になるのってありませんか。設計が悪いのかな。INNER JOIN x2とかはさすがにしませんが。

手元にある457文字のSQL文(もちろん単文)を公開したい気持ちになりますが、そうはいかないのでまともにサンプルソース書いておこうと思います。あとテンポラリテーブルでインデックスとか使いたいんだけど、と検索しても日本語のページが1つ(それも自分のローカルだとうまくいかなかった)しかなかったので、それも含めて書いておきます。

まあ雑談はこれくらいにしてサンプルを乗っけますね。最初は詰まるの、後ろが詰まらないの。書き込みロックとか確かに有難いこと多いんですが、正直に言えば処理時間中に変わった分に関しては見なかったことにしてよ、と言いたくなりますよね。見なかったことにするコードがこれですが。あとmainTableが恐ろしくデカい場合にはこれは使ったらまずいので、諦めてhogeIDの範囲なりで区切って小さい処理にしてあげてください。

インデックス作りながらテンポラリテーブル作るサンプル

今日はもう一つかなり小さいTipsだけど自分には閃き足りなかったのを別記事にしておきます。

 

カテゴリー: MySQL, プログラミング関連 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です