インデックスを作成するための巨大なデータベースがあります。そこには膨大な量の情報を挿入し、千塊に分割します。 1つが挿入されるたびに、インデックスが更新されます。問題は、情報を挿入するのに要する時間がジャーナルファイルを300メガ以上にまで上げるこれらの巨大なトランザクションのために100周ぐらいのあいだに非常に長くなってしまうことです。インデックスの更新を延期する方法はありますか?
索引がスキーマ内に定義されたままであり、すべての表にデータが移入された後に更新索引(場合によってはFREEZE INDEX
コマンドなど)を延期する方法はありますか?
私はこれがすでにDROP INDEX
とCREATE INDEX
によって達成できることを知っていますが、私はやや洗練された解決策、あるいは恐らくトリックを探していました。
残念ながら、DBMSを簡単に変更することはできません。また、PostgreSQLを使用して調査することもできます。
トランザクションで実行された場合、sqlliteはトランザクションがコミットするときにのみインデックスを更新します。その間、インデックスは最適なソリューションのように見える他のクエリでも使用できます。 – Ilion
@llion "その他のクエリ"? SQLiteはパラレルクエリを適切に処理できることで知られていません。データを変更するトランザクションを開始すると、データベースは完了するまで他のクエリにロックされます。 – amphetamachine