• ベストアンサー

MoveNextの処理速度は?

お世話になります。 セレクトした結果(100000件)を一件ずつ違うテーブルにインサートする処理を行っているのですが、セレクトしたデータをMoveNextしていくとだんだん遅くなっていくような感じがします。MoveNextとはどのような処理なのでしょう か? またこの方法以外にSelectしたものを一軒ずつInsertするよい(早い)方法があれば教えてください。 Set oraDynaset = DATABASE.oraDynaset(セレクト文, 0&) Do Until oraDynaset.EOF insert処理... oraDynaset.MoveNext Loop

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.5

ORADYN_READONLYとORADYN_NO_REFETCHを一緒に指定してみてはどうですか?

takataka111
質問者

お礼

ありがとうございました、 いっしょに設定する方法を試したのですが 、効果はありませんでした。 とりあえず、ストアドプロシジャで対応する事にしました 。

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.4

Oracle Clientを普通にインストールするとoo4oのヘルプも一緒にインストールされているはずなんですけど。 CreateDynasetメソッドや、OpenDatabaseメソッドの箇所をどうぞ。

takataka111
質問者

お礼

ありがとうございます。 VBのヘルプを見てました(笑) dbcreatedynaset(sql, 8&) を指定したのですが、スピードは変わりませんでした。

すると、全ての回答が全文表示されます。
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>ただ、セレクトしたデータを加工してインサートしたいと >考えております。 どのような加工でしょう? どうしてもSQLで出来ない加工ですか? 速度的には雲泥の差になるかもしれませんよ。 あと、SQLで出来ないとしたときのアドバイスを。 Dynasetの作成方法なんですが、読み込み専用で、前方に戻れないようなオプションをつけて作成してください。 MoveNextで行われるのはフェッチ処理です。 レコード件数が多くなると、前方に戻れるカーソル(Dynaset)ではバッファに内容を格納していくので処理が遅くなります。

takataka111
質問者

補足

ご回答ありがとうございます 読み込み専用オプションとはどのように設定するのでしょうか? 参考になるようなホームページ等ご存知内でしょうか? なにぶんVB初心者なのでどこをどう調べてよいかわからず 困っています。 よろしくお願いします。

すると、全ての回答が全文表示されます。
  • muran
  • ベストアンサー率31% (12/38)
回答No.2

DAOを使用されていますか? もしDAO使用でデータがJETであれば、INSERT分を発行するより、 ADDNEW/UPDATEにてテーブルに追加したほうが、 INSERT文発行より約4倍近くスピードが違うそうです。 特に更新明細が多ければ多いほど、速度差は大きくなります。 MOVENEXTで処理が遅くなっているというよりは、 20,000件近いデータの更新処理が遅い原因かと思われますので、 この更新方法をお勧めしたいです。 ADDNEW、UPDATEはDAOのヘルプに載ってます。参考になすってください。

takataka111
質問者

補足

oo4oにて処理を行っています UPDATEにてテーブルに追加とは、 SQL文のUPDATEのことでしょうか? ADDNEWとはどのようなSQL文なのでしょうか? よろしくお願いします。

すると、全ての回答が全文表示されます。
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

>またこの方法以外にSelectしたものを一軒ずつInsertするよい(早い)方法があれば教えてください。 insert先のテーブルの分だけ insert into インサート先A select F1,F2 from 元テーブル名 where インサート先Aに入れるレコードの抽出条件 という感じのinsert文を使って入れるべきでしょう。

takataka111
質問者

補足

ご回答ありがとうございます。 ただ、セレクトしたデータを加工してインサートしたいと 考えております。 Do Until oraDynaset.EOF データの加工 加工したデータをinsert処理... oraDynaset.MoveNext ですのでInsert Into table Select... で行う手段は断念したのです。 今現状で18,000件のデータをセレクトして一軒ずつ加工して一軒ずつInsertする方法ですと処理が終わらない状況です(泣)

すると、全ての回答が全文表示されます。

関連するQ&A