Sqlite优化
转载:http://www.jianshu.com/p/3b4452fc1bbd http://www.cnblogs.com/wangmars/p/3914090.html
一,单线程池 由于不支持SQLite不支持多线程并发,所以只能单线程处理
二,使用索引 适当的索引的好处是让读取变快,当然带来的影响就是数据插入修改的时间增加,因为还得维护索引的变化。不过对于大部分的读操作多于写操作的数据库来说索引还是十分有必要的。关于如何设计索引,可以参考下面这个文章:
三,事务 1. 提高速度 2. 保持一致性 方式1:SQLiteDatabase <span style="font-size:14px;">public void inertOrUpdateDateBatch(List<String> sqls) { SQLiteDatabase db = getWritableDatabase(); db.beginTransaction(); try { for (String sql : sqls) { db.execSQL(sql); } // 设置事务标志为成功,当结束事务时就会提交事务 db.setTransactionSuccessful(); } catch (Exception e) { e.printStackTrace(); } finally { // 结束事务 db.endTransaction(); db.close(); } }</span> 方式2:SQLiteDatabase db.insert("table_name",null,contentValues) 中也可以批量插入
<span style="font-size:14px;">public void insertData(插入数据){ db.beginTransaction(); // 手动设置开始事务 for (ContentValues v : list) { db.insert("表名",v); } db.setTransactionSuccessful(); // 设置事务处理成功,不设置会自动回滚不提交 db.endTransaction(); // 处理完成 db.close() }</span>
<span style="font-size:14px;">String sql = "insert into表名(对应的列) values(?)"; SQLiteStatement stat = db.compileStatement(sql); db.beginTransaction(); for (数据集) { //环所要插入的数据 } db.setTransactionSuccessful(); db.endTransaction(); db.close();</span>
实测发现,对于几十条sql插入当你替换成单条sql时性能有所提升,但是这里要注意的是,换成单条可读性较差,同时会出现sql超长的错误。 五,读和写操作是互斥的,写操作过程中可以休眠让读操作进行 由于第一步所说的多数据事务插入,从而会导致插入时间增长那么也会影响数据展示的速度,所以可以在插入过程中休眠操作,以便给读操作流出时间展示数据。
六, 增加查询条件 七, 提前将字段的index映射好 八、数据库设计上 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |