1

我正在尝试将大约 2800 条记录插入到 sqlite 数据库中,这需要 150 秒,这太多了!谁能告诉如何优化这个插入。

    public void createVariantEntry(ArrayList<ArrayList<String>> str) {
        InsertHelper ih = new InsertHelper(Database, VARIANT_TABLE_NAME);
        final int varid = ih.getColumnIndex(VARIANT_ID);
        final int varmakeid = ih.getColumnIndex(VARIANT_MAKE_ID);
        final int varmodid = ih.getColumnIndex(VARIANT_MODEL_ID);
        final int varname = ih.getColumnIndex(VARIANT_NAME);
        final int varposteddate = ih.getColumnIndex(VARIANT_POSTED_DATE);               
        for(int i=0;i<1253;i++)
        {           
            ih.prepareForInsert();
            ih.bind(varid, str.get(i).get(0));
            ih.bind(varmakeid, str.get(i).get(1));
            ih.bind(varmodid, str.get(i).get(2));
            ih.bind(varname, str.get(i).get(3));
            ih.bind(varposteddate, str.get(i).get(4));
            ih.execute();
        }                       
        for(int i=1255;i<str.size();i++)
        {               
            ih.prepareForInsert();
            ih.bind(varid, str.get(i).get(0));
            ih.bind(varmakeid, str.get(i).get(1));
            ih.bind(varmodid, str.get(i).get(2));
            ih.bind(varname, str.get(i).get(3));
            ih.bind(varposteddate, str.get(i).get(4));
            ih.execute();
        }           
        ih.close(); 
    }
4

2 回答 2

3

使用事务时将获得极大的性能提升。

try {
    SQLiteDatabase db = MySQLiteOpenHelper.getWritableDatabse();
    ContentValues values = new ContentValues();
    db.beginTransaction();
    while ( more_data_to_insert ) {
        // put the data in 'values'
        values.put("col_1", data_1);
        values.put("col_2", data_2);
        // ...
        values.put("col_n", data_n);

        // Insert the row into the database.
        db.insert("table_name", null, values);
    }
    db.setTransactionSuccessful();
} catch ( SQLiteException e ) {
    // handle your sqlite errors
} finally {
    db.endTransaction();
}

并且不要使用InsertHelper. 它现在已弃用。

于 2013-05-10T12:24:37.730 回答
2

以下是一些可能对您有所帮助的一般提示:

在此之后,您必须针对您的具体情况进行一些基准测试和优化,分析性能与数据完整性权衡等。祝您好运。

于 2013-05-08T06:53:57.217 回答