簡體   English   中英

使用ContentProvider在SQLITE中緩慢檢索數據需要很長時間

[英]Slow retrieval of data in SQLITE takes a long using ContentProvider

我在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()。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;
}

所以這很尷尬:

顯然,在“應用程序加載”期間某處有一行代碼正在從表A中檢索數據。這使整個應用程序變慢。

無論如何,我仍然必須弄清楚如何使用ContentProvider優化從表A的加載數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM