私はSQLite3を使用しているアプリを持っています。それはかなりうまく動いていますが、私はSQLite(書き込み)アクセスの高速化に関する提案をしたいと思います。データベース操作のほとんどは、トリプル(int、int、double)の数値を書きます。約20-50トリプル/秒です。時々読むことがありますが、鶏の歯ほどまれです(ほとんどの場合のみ積載時に発生します)。iPhoneでSQLite3を最適化
コードを最適化する(またはリース解除する)提案がありますか?私が見逃したSQLite3のショートカット(CoreDataを使用しているのは、プログラム内の他のもののためです。)
初期化中にステートメントst1を準備します。それはから準備される
const char *sql = "insert into historic values (?, ?, ?)";
if (sqlite3_prepare_v2(database, sql, -1, &st1, NULL) == SQLITE_OK) ....
この準備は一度だけです。保存するために使用しているスニペットが下にあります(わかりやすくするため、ここでエラーチェックを削除しました)。
-(BOOL) saveHvalue:(int) fid time:(int) t value:(double) v type:(int) ftype
{
{
sqlite3_bind_int(st1, 1, fid);
sqlite3_bind_int(st1, 2, t);
sqlite3_bind_int(st1, 3, ftype);
sqlite3_step(st1);
sqlite3_reset(st1);
sqlite3_clear_bindings(st1);
}
return YES;
}
。ありがとう。 –
これは私のスピードを大きさのオーダーで改善しました!!ありがとう! –
もちろん、一度に500レコードを処理して50 /秒を挿入すると、クラッシュ時に最大10秒のデータが失われます(ジャーナルにあるコミットされていないトランザクションはロールバックされると思います)。これはおそらくあなたのアプリにとって大きな問題ではないかもしれません。 – lapo