4

C インターフェイスを介して CSV ファイル全体を SQLite にインポートする方法はありますか?

次のようなコマンドライン インポートを認識しています。

   sqlite> .mode csv <table>
   sqlite> .import <filename> <table>

しかし、私は自分のプログラムでこれを行うことができる必要があります。

また、CSV ファイルを読み取り、その内容を 1 行ずつテーブルに挿入する CSV リーダーを C++ で作成できたことにも注意してください。

これで作業は完了しますが、730,000 行を含む CSV を使用すると、この方法では読み込みに約 20 分かかり、非常に長くなります。(これは、処理されるものの平均サイズに近いものになります)

(マシン: Intel(R) Core(TM)2 Duo CPU E8500 @ 3.16GHz 3.17GHz、4.0 GB RAM、Windows 7 64 ビット、Visual studios 2010)

これは私のプロジェクトでは受け入れられないため、より高速な方法が必要です.2〜3分ほどかかります.

インポートが不要になるように、ファイルのメモリの場所を参照する方法はありますか? もしそうなら、情報へのアクセスは遅いですか?

SQLite は CSV ファイルをバイナリ データとして取得できますか? これにより、ファイルのインポートが速くなりますか?

アイデア?

注: C インターフェースで ":memory:" オプションを使用して DB をメモリにロードし、速度を上げています (希望します)。

編集

さらに最適化を行った後、これを見つけまし。書き込みによって挿入ステートメントを 1 つのトランザクションにグループ化する方法について説明します。

BEGIN TRANSACTION;
INSERT into TABLE VALUES(...);
...Million more INSERT statements
INSERT into TABLE VALUES(...);
COMMIT;

これにより、パフォーマンスが大幅に向上しました。

便利な関連補足事項

また、クエリの結果からテーブルを作成する場合、またはクエリ結果をテーブルに挿入する場合は、テーブルを作成する場合はこれを、テーブルに結果を挿入する場合はこれを試してください。

挿入リンクは、テーブルへの挿入では明らかではない場合があります。そのためのクエリは次のようになります。

INSERT INTO [TABLE] [QUERY]

実行中のクエリ[TABLE]の結果を入力するテーブルはどこですか。[QUERY]

4

1 に答える 1

2

CSV ファイルを読み取り、その内容を 1 行ずつテーブルに挿入する CSV リーダーを C++ で作成することに成功しました...読み込みに約 20 分かかります

すべての挿入を単一のトランザクションに入れるか、少なくともトランザクションごとに 100 行または 1000 行をバッチ処理すると、プログラムの実行速度が大幅に向上することが期待できます。

于 2012-11-15T19:39:55.377 に答える