Sqlite的性能优化

比较安卓提供的API 执行insert,query,update,delete与execSql,rawQuery函数执行原生的插入,查询,更新,删除语句操作花费时间进行比较


数据量小的话,可能时间差不多,但是数量大到一定量的时候,会发现execsql 原生的SQL语句执行要更快.因为安卓提供的API 实际上会拼接成SQL语句在执行插入数据库.所有拼接的过程也需要时间.

大量数据插入时如何优化?

测试了下,直接通过for循环insert的话,插入较慢,分析了下Monitor 看见,不断对磁盘进行写入,而且是成高低谷形状.想了下,Web开发的时候可以通过事务插入.在安卓开发也可以.测了下

db.beginTransaction(); //手动设置开始事务

 try{

 //批量处理操作 

for(Collection c:colls){ insert(db, c); 

} db.setTransactionSuccessful(); //设置事务处理成功,不设置会自动回滚不提交。 

//在setTransactionSuccessful和endTransaction之间不进行任何数据库操作 

}catch(Exception e){ MyLog.printStackTraceString(e);

 }finally{


 db.endTransaction(); //处理完成

 }



发现就读写了一次文件,而且写入速度也比之前提升了不少.~~

你可能感兴趣的:(Sqlite的性能优化)