我在 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 + ") ";
我已将列和表名定义为字符串常量。
从表 A 中检索此数据时,我的速度已经明显变慢。问题是,当我从该表中检索数据时,我首先将其放入 ArrayList 中,然后再显示它。显然,这可能是错误的做事方式。我试图找到一种更好的方法来使用 ContentProvider 来解决这个问题。但这不是困扰我的问题。
问题是由于某种原因,从最多只有 12 条记录的其他表中检索数据需要更长的时间。我看到这种延迟随着表 A 中记录数量的增加而增加。这没有任何意义。如果我从表 A 中检索数据,我可以理解延迟,但为什么从其他表中检索数据时会出现延迟。
澄清一下,如果表 A 为空或少于 3000 条记录,我不会遇到这种延迟。
可能是什么问题呢?
编辑:2012 年 9 月 14 日上午 9:53
为了澄清,我使用 ContentProvider 来管理数据库。为了查询数据,我使用了 context.getContentResolver().query 方法。
我在 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;
}