MS Access テーブルに 800000 レコードを挿入する必要があります。Delphi 2007 とそのTAdoXxxx
コンポーネントを使用しています。テーブルには、いくつかの整数フィールド、1 つの浮動小数点フィールド、および 1 つの文字のみを含む 1 つのテキスト フィールドが含まれています。整数フィールド (autoinc ではない) の 1 つに主キーがあり、別の整数フィールドと float フィールドに 2 つのインデックスがあります。
を使用したデータの挿入にはAdoTable.AppendRecord(...)
10 分以上かかります。これは、ユーザーがプログラムで新しいデータベースの使用を開始するたびに行われるため、許容できません。データが別のデータベース ( からはアクセスできないADO
) から取得されているため、テーブルを事前入力できません。
tAdoCommand
レコードをタブ区切りのテキスト ファイルに書き込み、オブジェクトを使用して実行することで、約 1 分に短縮できました。
insert into table (...) select * from [filename.txt] in "c:\somedir" "Text;HDR=Yes"
しかし、私はこれのオーバーヘッドが好きではありません。
もっと良い方法があるに違いない、と私は思う。
編集:
いくつかの追加情報:
- MS Access を選択した理由は、ターゲット マシンに追加インストールする必要がなく、データベース全体が簡単にコピーできる 1 つのファイルに含まれているためです。
- これはシングル ユーザー アプリケーションです。
- データは一度だけ挿入され、データベースの存続期間中は変更されません。ただし、テーブルには、別のデータベースの対応するレコードがユーザーによって処理されたことを示すフラグとして使用される 1 つの追加フィールドが含まれています。
- 1 分(最大 3 分も) で問題ありませんが、私のソリューションは機能しますが、複雑すぎるように思われるので、もっと簡単な方法があるはずだと考えました。
- データが挿入されると、テーブルのパフォーマンスは非常に良好です。
- Access データベースを操作するプログラムの機能の計画/実装を開始したとき、テーブルは必要ありませんでした。それが必要になったのは、顧客から別の機能が要求されたときだけでした。(いつもそうじゃない?)
編集:
これまでに得たすべての回答から、Access テーブルに大量のデータを挿入するための最速の方法を既に理解しているようです。皆さんのおかげで、私はあなたの助けに感謝します.