• ベストアンサー

DBIによるまとめて実行

現在、PerlのDBIを使用し、MySQLの処理をするバッチ プログラムを開発しております。 データが1万件ほどあるのですが、1万データに対して、 1日1回ステータス等の反映処理を行わなければいけま せん。 これを現在ではfetchrowを使用し1万データを回して 各種updateをかけているのですが、非常に時間がかかるため、 何かまとめてupdateがかけられる方法がないかと質問さ せていただきました。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

更新条件や更新内容など不明ですが、クライアントにfetchしなくても、 ひとつの更新SQL文に纏める事が出来れば、サーバプロセス-クライアント間の 転送のためのオーバヘッドが減る分だけ、速くなると思いますよ。 もし、更新条件がややこしくて、単一の更新SQLに纏める事ができない場合は、 ストアドプロシジャ化するなどが、次善策になるかと思います。

ajtchf
質問者

お礼

ありがとうございます。 ストアドプロシジャはこういうときに使うものなんですね。 上記にも書かせていただきましたが、色々調べている上で、 プレースホルダというものを使用すれば高速に処理できるの ではという結論にいたりそうです。

その他の回答 (1)

  • spieder
  • ベストアンサー率59% (13/22)
回答No.2

どのような更新作業を行う必要があるのかわかりませんが、UPDATE文にCASEで条件等を書けばわざわざfetchrowで回さなくても、SQLで今の状態を元に一括更新ができると思います。 SQL1つ投げるだけなら、DBサーバー側との通信は最小限にまで減らせますので、1万行取得した内容に対して1万回UPDATE文を実行する必要はなくなります。

参考URL:
http://codezine.jp/article/detail/405
ajtchf
質問者

お礼

ありがとうございます。 色々調べている上で、プレースホルダというものを 使用すれば高速に処理できるのではという結論にいた りそうです。

関連するQ&A