- ベストアンサー
DBIによるまとめて実行
現在、PerlのDBIを使用し、MySQLの処理をするバッチ プログラムを開発しております。 データが1万件ほどあるのですが、1万データに対して、 1日1回ステータス等の反映処理を行わなければいけま せん。 これを現在ではfetchrowを使用し1万データを回して 各種updateをかけているのですが、非常に時間がかかるため、 何かまとめてupdateがかけられる方法がないかと質問さ せていただきました。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
更新条件や更新内容など不明ですが、クライアントにfetchしなくても、 ひとつの更新SQL文に纏める事が出来れば、サーバプロセス-クライアント間の 転送のためのオーバヘッドが減る分だけ、速くなると思いますよ。 もし、更新条件がややこしくて、単一の更新SQLに纏める事ができない場合は、 ストアドプロシジャ化するなどが、次善策になるかと思います。
その他の回答 (1)
- spieder
- ベストアンサー率59% (13/22)
回答No.2
どのような更新作業を行う必要があるのかわかりませんが、UPDATE文にCASEで条件等を書けばわざわざfetchrowで回さなくても、SQLで今の状態を元に一括更新ができると思います。 SQL1つ投げるだけなら、DBサーバー側との通信は最小限にまで減らせますので、1万行取得した内容に対して1万回UPDATE文を実行する必要はなくなります。
質問者
お礼
ありがとうございます。 色々調べている上で、プレースホルダというものを 使用すれば高速に処理できるのではという結論にいた りそうです。
お礼
ありがとうございます。 ストアドプロシジャはこういうときに使うものなんですね。 上記にも書かせていただきましたが、色々調べている上で、 プレースホルダというものを使用すれば高速に処理できるの ではという結論にいたりそうです。