1

私はこれに少し迷っています。439397レコード(〜32MB)の静的SQLiteデータベースから読み取っているアプリケーションがあります。

インデックスが作成された列でデータベースにクエリを実行していますが、クエリが完了するまでに8〜12秒かかります。私が使用している現在のクエリは、idのリストに対してdatabase.query(tableName、columnHeaders、 "some_id =" + id)を実行することです。

「WHEREsome_idIN(id1、id2、id3)」アプローチを試してみましたが、2倍の時間がかかりました。間違っているのではないかと感じています。

クエリはAsyncTaskで実行されるため、パフォーマンスを向上させるために他に何ができるか迷っています。

  • アップデート:

アプリケーションの動作を変更することで問題を解決しました。

4

2 に答える 2

0

そのフィールドにインデックスがないようです。実際のクエリでフィルタリング/並べ替え/グループ化に使用する場合、インデックスはいくつかのフィールドをカバーする必要がある場合があることに注意してください(まだ見ていないため、詳細はわかりません)。

于 2012-06-21T16:40:08.940 に答える
0

を使用EXPLAIN QUERY PLANして、インデックスが実際に適切に使用されていることを確認できます。

実際の列リストの代わりにクエリを1回実行してCOUNT(*)、問題がフラッシュストレージから行データを実際に読み取る行為であるかどうかを確認できます(一致するものが多く、大きな列が多い場合に可能です)。 。

クエリを実行して(N個ではなく)単一のIDに一致させて、問題の比較が多すぎるかどうかを把握しようとすることができます。

AsyncTaskただし、それが魔法のように速くなるわけではないことを覚えておいてください。それは物事を魔法のようにメインアプリケーションスレッドで実行しないようにします。

于 2012-06-21T16:34:00.510 に答える