SQLite Cursor在第一次调用时冻结大约10秒钟

时间:2012-10-22 11:08:26

标签: 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()等)工作正常。为什么呢?

更新:架构

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

创建了独特的索引,这有所帮助。谢谢!