テーブルと 2 つの整数で構成される主キーを持つ Sqlite3 データベースがあり、そこに大量のデータを挿入しようとしています (つまり、約 1GB 程度)。
私が抱えている問題は、主キーを作成すると暗黙的にインデックスも作成されることです。これは、私の場合、数回のコミット後にクロールへの挿入が停止することです (データベース ファイルが NFS にあるためです..ため息)。
だから、どういうわけかそのインデックスを一時的に無効にしたいと思います。これまでの私の最善の計画は、主キーの自動インデックスを削除することでしたが、SQLite はそれを好まず、そうしようとするとエラーがスローされるようです。
2 番目に良い計画は、アプリケーションがネットワーク ドライブ上にデータベースの透過的なコピーを作成し、変更を加えてからマージすることです。ほとんどの SQlite/NFS の質問とは対照的に、アクセスの同時実行は必要ないことに注意してください。
そのようなことをする正しい方法は何でしょうか?
アップデート:
既に使用しているフラグを指定するのを忘れていました:
PRAGMA synchronous = OFF
PRAGMA journal_mode = OFF
PRAGMA locking_mode = EXCLUSIVE
PRAGMA temp_store = MEMORY
更新 2: 実際にはアイテムをバッチに挿入していますが、次のバッチは前のバッチよりもコミットが遅くなります (これはインデックスのサイズに関係していると思います)。10k から 50k のタプルのバッチを試してみました。それぞれのタプルは 2 つの整数と浮動小数です。