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]