1

我有 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
4

2 回答 2

3

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

于 2012-10-22T11:26:15.763 回答
0

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

于 2012-10-22T11:48:01.120 回答