Android SQLite 性能优化技巧
相对于封装过的ContentProvider而言,使用原始SQL语句执行效率高,比如使用方法rawQuery、execSQL的执行效率比较高对于需要一次性修改多条数据时,可以考虑使用SQLite的事务方式批量处理,我们定义SQLiteDatabase db对象,执行的顺序为
打好SQL语句的基础,对于查询,以及分配表的结构都十分重要,一些传统数据库优化技巧同样实用,如建立索引,加入冗余字段,分页查询等等在进行cursor操作时,千万别忘记执行cursor.close()方法避免子查询。在某些情况下,SQLite 数据库引擎会将子查询结果存储在临时文件中,这会延长处理时间db.beginTransaction();
//这里处理数据添加,删除或修改的SQL语句
db.setTransactionSuccessful(); //这里设置处理成功db.endTransaction(); //这句很重要,告诉数据库处理完成了,这时SQLite的底层会执行具体的数据操作
以上1,3,4,5点都很好理解,但是第2点,事务为什么能提高性能呢?
当我们在未开启事务的情况下执行一条(仅一次插入)插入语句时,数据库会默认为该语句添加事务,在语句结束后,会进行一次自动地Commit操作把数据刷新到磁盘数据文件中。
如果有多条插入语句,那么,在为开启事务的情况下,数据库会为每一个插入语句都进行一次自动的Commit操作。
因为Commit操作会把数据刷新到磁盘数据文件中,而写入磁盘数据文件的操作就非常耗时间了,因为要验证,更新索引等。
所以如果使用事务处理多条语句,仅仅需要Commit一次,大大节省了时间,提高了性能。