Android SQLite游标在第一次调用时冻结约10秒

Android SQLite游标在第一次调用时冻结约10秒,android,sqlite,cursor,android-cursor,Android,Sqlite,Cursor,Android Cursor,我有10 mb的数据库和以下代码: cursor = mDatabase.query(CitySQLiteHelper.TABLE_CITIES, ALL_COLUMNS, null, null, null, null, "name DESC", "20"); if (cursor.getCount() > 0) { // } 执行在if语句处冻结约10秒。我尝试了getCount和moveToFirst——这两种情况下都会冻结。查询和第一次调用后对游标(getString()等)的所有

我有10 mb的数据库和以下代码:

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

当您第一次从数据库中读取数据时,您只是试图读取许多兆字节的数据。后续数据库访问将受益于缓存。如果数据库存储在SD卡上,请尝试将其移动到内部存储。否则,请尝试在应用程序启动时(在后台线程中)从数据库进行初始读取,以“初始化”数据库,以便以后快速访问。

创建了唯一索引,这很有帮助。谢谢

你能展示一下模式吗?有多少行?您是否尝试创建索引?