1

私は10メガバイトのデータベースとこのコードを持っています:

cursor = mDatabase.query(CitySQLiteHelper.TABLE_CITIES, ALL_COLUMNS, null, null, null, null, "name DESC", "20");
if (cursor.getCount() > 0) {
//
}

if 文で約 10 秒間実行がフリーズします。getCount と moveToFirst を試しました - どちらの場合もフリーズします。最初の呼び出しの後のクエリとカーソルへのすべての呼び出し (getString() など) は正常に機能します。なんで?

更新: スキーマ

sqlite> .schema cities
CREATE TABLE cities (region text, name text, latitude float, longitude float);
sqlite> select count(*) from cities;
130070
4

2 に答える 2

3

最初に DB から読み取るときに、何メガバイトものデータを読み取ろうとしているだけです。後続のデータベース アクセスは、キャッシュの恩恵を受けます。データベースが SD カードに保存されている場合は、内部ストレージに移動してみてください。それ以外の場合は、アプリの起動時に (バックグラウンド スレッドで) データベースから最初の読み取りを実行して、後で高速にアクセスできるように「準備」してみてください。

于 2012-10-22T11:26:15.763 に答える
0

一意のインデックスを作成し、これが役立ちました。ありがとう!

于 2012-10-22T11:48:01.120 に答える