質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

4回答

4122閲覧

SQLのupdate文の想定時間について

awazon78

総合スコア32

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2019/05/30 09:46

結構な件数の重たいUPDATE文を実行しようと思ってるのですが、おおよそ何分かかるのか知りたい場合、クエリは実行しないで想定時間を知る方法って無いですか?

MySQLでSQLの実行時間のみを調べる

このような記事を見つけましたが、実行してしまうので、、

もし無いとしたら、dbをコピーしてそちらで一度実行させるのが手っ取り早いですか??

ご教授宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

UPDATE 後、COMMITしないでROLLBACKすれば済むことでは?

投稿2019/05/30 12:16

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

awazon78

2019/05/31 01:52

下の方もおっしゃっていましたが良さそうですね!
guest

0

ベストアンサー

トランザクションでロールバックすれば良いのでは?

追記

処理時間を気にする=性能改善の対象
質問の本題とは逸れますが、この回答へのコメントから、少なくとも一括コミットでの性能改善余地がありそうに感じたので
MySQLに大量のデータを入れるときに最適な方法は?

そもそもはupdateの発行回数を減らすようにするのが最善ですけど、それを行うには影響が大きいでしょうね。

投稿2019/05/30 11:00

編集2019/05/31 03:14
sazi

総合スコア25184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2019/05/31 00:32

負荷の調査のために負荷をかけて大丈夫なのでしょうか? その間当該レコードをロックするんですよね?
sazi

2019/05/31 00:53

トランザクション制御については、バイナリログの話ですね。 新たにロックする/しないの話は生まれないと思うのですが? 所要時間調査で、COMMIT/ROLLBACKの差異は気にする程の割合では無いと思っています。
awazon78

2019/05/31 01:51

なるほど。。 START TRANSACTION; UPDATE A_TABLE SET NAME = 'aaa' WHERE ID = 1; UPDATE A_TABLE SET NAME = 'bbb' WHERE ID = 2; ~~~省略 ROLLBACK; って事ですね。 ロックしないのであれば良いですね!
tacsheaven

2019/05/31 02:07

逆に auto transaction になっていると、1件の update が実際には start transaction -> update -> commit になってしまうので、実際の「update 単独」の速度ではなくなります。
sazi

2019/05/31 02:15 編集

@tacsheavenさん > おおよそ何分かかるのか知りたい ということでもあるので、処理時間を気にする程度の処理であるなら、トランザクション制御の部分に要する時間の比率は少ないと思うのです。
tacsheaven

2019/05/31 02:45

なんですが、1件ごとコミットだと、連続updateしたときの差って結構でかいですから……バッチ処理で100件単位とかで start transaction -> commit ってやるだけで性能目に見えて変わりますからねえ……
sazi

2019/05/31 02:52 編集

確かにこのコメントに書かれたようなものだと、違ってきますね。 あくまで単独のSQLでのUPDATEを想定した回答でしたから。
awazon78

2019/05/31 06:27

処理時間を知りたい = 実行日に朝何時に出社しようかなとおもったので。。 普段あまりsqlをがっつり触ることが少ないので勉強になります。お二人ともありがとうございます
guest

0

負荷が気になるというだけであれば
where句の条件次第ですが
limitを与えて何度かに分けて処理してみては?
場合によってはprocedureを用意すれば良いでしょう

投稿2019/05/30 10:03

yambejp

総合スコア114806

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

同じSQLは環境状況により同じ結果(実行時間)が返ってくるとは限らないので、実際にSQLを実行するしかないはずです。
どうしても本番に手を入れたくないというのでしたらご提示のようにテスト用DBを作ってそちらで試すのが良いのではと。

投稿2019/05/30 09:54

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問