我在Android(运行4.0.3)中有一个应用程序,它在表A中存储了大量数据。表A驻留在SQLite数据库中。我使用ContentProvider作为数据库上方的抽象层。
这里的大量数据意味着每月近80,000条记录。表A的结构如下:
String SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_A + " ( " +
COLUMN_ID + " INTEGER PRIMARY KEY NOT NULL" + "," +
COLUMN_GROUPNO + " INTEGER NOT NULL DEFAULT(0)" + "," +
COLUMN_TIMESTAMP + " DATETIME UNIQUE NOT NULL" + "," +
COLUMN_TAG + " TEXT" + "," +
COLUMN_VALUE + " REAL NOT NULL" + "," +
COLUMN_DEVICEID + " TEXT NOT NULL" + "," +
COLUMN_NEW + " NUMERIC NOT NULL DEFAULT(1)" + " )";
这是索引声明:
String SQL_CREATE_INDEX_TIMESTAMP = "CREATE INDEX IF NOT EXISTS " + TABLE_A +
"_" + COLUMN_TIMESTAMP + " ON " + TABLE_A + " (" +
COLUMN_TIMESTAMP + ") ";
我已将列和表名定义为String Constants。
从表A中检索此数据时,我已经遇到了明显的减速问题。问题是,当我从此表中检索数据时,我首先将它放在ArrayList中然后显示它。显然,这可能是错误的做事方式。我试图找到一种更好的方法来使用ContentProvider来解决这个问题。但这不是困扰我的问题。
问题是出于某种原因,从其他最多只有12条记录的表中检索数据需要花费更长的时间。随着表A中的记录数量的增加,我看到这种延迟增加。这没有任何意义。如果我从表A中检索数据,我可以理解延迟,但是为什么从其他表中检索数据的延迟。
澄清一下,如果表A为空或记录少于3000,我不会遇到此延迟。
可能是什么问题?
编辑:09/14/2012 9:53 AM
为了澄清,我使用ContentProvider来管理数据库。要查询数据,我使用的是context.getContentResolver()。查询方法。
我在ContentProvider中的查询代码:
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
final SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
final SQLiteDatabase db = dbHelper.getReadableDatabase();
String tableName = getTableName(uri);
queryBuilder.setTables(tableName);
Cursor cursor = queryBuilder.query(db, projection, selection, selectionArgs, null, null, sortOrder);
cursor.setNotificationUri(getContext().getContentResolver(), uri);
return cursor;
}
答案 0 :(得分:0)
所以这很令人尴尬:
显然,在Application Load期间某处有一行代码正在从表A中检索数据。这就是整个应用程序运行速度变慢的原因。
无论如何,我仍然需要弄清楚如何使用ContentProvider优化表A中的加载数据。