SQLite 批量insert - 如何加速SQLite的插入操作
String sql = "INSERT INTO table (number, nick) VALUES (?, ?)";db.beginTransaction(); SQLiteStatement stmt = db.compileStatement(sql);for (int i = 0; i < values.size(); i++) { stmt.bindString(1, values.get(i).number); stmt.bindString(2, values.get(i).nick); stmt.execute(); stmt.clearBindings();} db.setTransactionSuccessful();db.endTransaction();
?
结合transactions和 compiled statements后, 性能有了巨大的提升: 从71秒到不可置信的5秒! 在Galaxy上的结果更是牛逼: 从478秒到1.5秒!
?
结论:
- 除非你只执行单次的insert, 或者你需要数据立即写入文件系统, 不然的话就用transactions
- 保证你的程序在真机上测试过, 最好是多台机器上测.
- 我上面的性能提升只在Samsung Galaxy S上测过, 不同的机器可能还是会有性能问题.
?