9

SQLite 操作 (クエリ、挿入、更新、削除) を実行するには複数の方法があり、一部の方法は他の方法よりも高速であることに気付きました。多くの Web サイトでさまざまなヒントが提供されており、一部の Web サイトは他の Web サイトと競合しています。

  1. 一括挿入にトランザクションを使用することは、ループで行うよりもなんとなく速いようです。

    どうして?SQLite を使用するときに最高のパフォーマンスを達成するための最良の方法は何ですか? sqlite は Android でどのように動作しますか?

  2. ここに示すように、InserHelperと ContentValuesの使用を混同します。

    InserHelperはどのように機能し、常にContentValuesよりも高速ですか? トランザクションでラップすると、さらに高速になりますか?

  3. 他の SQL フレームワークに関する混乱。インデックスを追加すると、インデックスに関連するクエリのパフォーマンスが向上することを覚えています。これはAndroidにも当てはまりますか?これは良い習慣ですか?

  4. 場合によっては、DB 操作に UI スレッドを使用しない方がよいと聞いたことがあります。これはどのような場合に推奨されますか? のように、DB 操作がどれくらい遅くなる可能性がありますか? DB が 70MB になると、処理速度が大幅に低下し、UI スレッドで処理されないということですか?

4

1 に答える 1

13

どうして?

トランザクションにはディスク I/O が含まれます。ディスク I/O の小さなチャンクを多数実行するよりも、ディスク I/O の 1 つの大きなチャンクを実行する方がはるかに安価です。

InserHelper はどのように機能し、常に contentValues よりも高速ですか?

ドキュメントの引用: 「このクラスを使用すると、ユーザーはテーブルに複数の挿入を実行できますが、SQL 挿入ステートメントを 1 回だけコンパイルできるため、パフォーマンスが向上する可能性があります。」

トランザクションでラップすると、さらに高速化されますか?

おそらくそうです。

アンドロイドにも当てはまりますか?

実行しているクエリに適切なインデックスを作成すると、インデックスによってクエリの速度が向上します。インデックスを更新する必要があるため、インデックスは常に挿入/更新/削除の速度を低下させます。Android とは特に関係ありません。

使用するのは良いことですか?

それは抽象的に答えることは不可能です。Android とは特に関係ありません。

DB 操作に UI スレッドを使用しないことをお勧めします

正しい。

どのような場合に推奨されますか?

メイン アプリケーション スレッドでディスク I/O を実行することはお勧めできません。

DB操作がどれくらい遅くなる可能性がありますか?

何世紀も。おそらくそれまでに、デバイスで何かが故障するか、バッテリーが切れるでしょう。

DBが70MBになると、かなり遅くなるということですか?

それはあなたがそれをどうするかにかかっています。

UIスレッドはそれを処理すべきではありませんか?

正しい。

于 2012-10-13T18:39:17.373 に答える