Accessに「高速Insert」をするには?

解決


シヴァ  2006-11-16 03:53:36  No: 134158

質問です。

配列に格納されてる複数件分のデータをFor文を使って
一件一件繰り返しながら、
INSERT文を発行して、1レコードずつ作成しています。

これだと処理時間が掛かりすぎてしまいます。

1回のINSERT文の発行で複数件のデータの登録は出来ないでしょうか?

環境
  VB.NET 2003
  ACCESS 2003
  ODBCドライバで接続しています。

よろしくお願いします。


魔界の仮面弁士  2006-11-17 08:42:39  No: 134159

> ODBCドライバで接続しています。

mdb への ODBC 接続は比較的低速なので、避けた方が無難でしょう。

高速化のみに焦点を絞るのであれば、DAO を使って、
「テーブルタイプの Recordset」に AddNew するようにすれば
単一テーブルへの登録は、相当の高速化を図ることが出来ます。

ただし、.NET からだと、COM Interop の分の効率低下があるので、
本当に高速化できるかどうかは、試してみないとわかりませんけれども。


シヴァ  2006-11-17 19:05:17  No: 134160

ご回答、ありがとうございます。

ODBC接続は低速なのですね。知りませんでした。
DAOを使って速度実験をしてみます。

又、他に何か良い方法がありましたら、よろしくお願いします。


シヴァ  2006-11-18 03:07:16  No: 134161

DAOを使っての速度実験がようやく終わりました。

魔界の仮面弁士様  ありがとうございました。

結果は魔界の仮面弁士様の云われていた通り、

>「テーブルタイプの Recordset」に AddNew するようにすれば
>単一テーブルへの登録は、相当の高速化を図ることが出来ます。

のようにすれば、処理速度を上げることが出来ました。

>ただし、.NET からだと、COM Interop の分の効率低下があるので

と、云われていましたが、それ以上の速度アップでした。

結果
今まで10秒かかっていたものが、5秒になりました。


魔界の仮面弁士  2006-11-18 08:12:48  No: 134162

>> ただし、.NET からだと、COM Interop の分の効率低下があるので
> と、云われていましたが、それ以上の速度アップでした。

気になったので、手元の環境で速度検証をしてみましたが、
VB6 と比べると、やはり速度低下が見受けられました。
http://www.vb-user.net/junk/replySamples/2006.11.17.23.00/daoAddNew.zip

なお、当方環境で、10万件のデータを追加するのにかかった時間は、
  1.70±0.02秒程度 …… VB6
  3.35±0.18秒程度 …… VB2005
  5.01±0.71秒程度 …… VBScript
でした。
他の環境では、また違った結果になると思いますが、一応参考までに。


シヴァ  2006-11-18 22:47:54  No: 134163

魔界の仮面弁士  様  

検証までしていただき、ありがとうございます。

話には聞いていましたが、.NETは本当に遅いのですね。

今回もいい勉強をされていただきました。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加