coredata データベースに既存のデータを事前入力する必要があるプロジェクトを構築しています。
iOS シミュレーターで sqlite ファイルを作成するためのパーサーを作成しました。すべて正常に動作します。単一のエンティティを使用しており、属性の 1 つにインデックスが付けられています。データ ファイルをコア データに解析した後のパフォーマンスは素晴らしく、すべてが良好です。
現在、生成された sqlite ファイル (~200Mb) をプロジェクトで同じデータ モデル、同じインデックスなどで使用しています。最初の起動時に、db ファイルをコピーしてデータを事前設定します。
NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"myproject" ofType:@"sqlite"];
NSString *storePath = [[[self applicationDocumentsDirectory] path] stringByAppendingPathComponent: @"myproject.sqlite"];
NSError *error;
if (![[NSFileManager defaultManager] fileExistsAtPath:storePath])
{
if ([[NSFileManager defaultManager] copyItemAtPath:defaultStorePath toPath:storePath error:&error])
NSLog(@"Copied starting data to %@", storePath);
else
NSLog(@"Error copying default DB to %@ (%@)", storePath, error);
}
コピーは正常に機能し、データには正常にアクセスできます。ただし、パフォーマンスはひどく、インデックスは明らかに使用されていません。
コピー操作後の sqlite ファイルのサイズを見ると、200Mb から 120Mb になりました。
モデルではすべて問題ないように見えます。インデックスを作成する必要があるものは、インデックス付きとしてチェックされます。
1) sqlite をコピーするときにインデックス データが削除されないようにする方法はありますか?
2) プログラムでインデックスを再構築することは可能ですか?
3) 他に何か考えはありますか?