1

Androidプラットフォームでトランザクション内でSQLを実行する方がはるかに高速である理由を誰かが説明できるかどうか疑問に思っていました。たとえば、次のようなコードがあります。

SQLiteDatabase db = dbHelperExt.getWritableDatabase();
db.beginTransaction();
try {
    ... // some sql inserting/updating/deleting
    db.setTransactionSuccessful();
} finally {
    db.endTransaction();
}

何百もの挿入を処理すると、速度が数倍速くなり、主にその理由が知りたいと思っていました。また、php/myqsl を扱っているときに同じ種類の増加に気づいていません。

4

1 に答える 1

2

SQLiteDatabase に対して操作を実行するたびに、デフォルトでトランザクションが開かれます。これにより、ファイルが開かれ、db オブジェクトが取得され、要求が実行され、ファイルへのアクセスが解放されます。さらに、お気づきかもしれませんが、最初のアクションはシステムにとってより重いものです。一意のトランザクションで同時に実行される異なる操作をマージしない場合、操作ごとに 1 つが作成されます (つまり、10 操作 = 10 トランザクションとそれぞれのすべての作業)。

すべてに対して 1 つのトランザクションを使用すると、より重い操作の 95% を 1 回だけ実行します。唯一の欠点は、リクエストの 1 つが失敗した場合、残りがキャンセルされることです。しかし、私にとって、これは実際には利点です。

編集: ここにさらに詳細な情報があります。

于 2012-09-12T20:10:17.497 に答える