前几天Android应用开发过程中碰到一个问题,当将大量数据插入到数据库(sqlite3)时,在Log中发现独立线程进行处理的约上百次insert操作竟然耗费了10.6s 的时间。

for (int i = 0; i < headers.length; i++) {// ...    dataBase.insert(tableName, fields);}

考虑如何提升操作性能时,在SQLite的官方网站上的常用问答中找到了以下的信息:

By default, each INSERT statement is its own transaction. But if you surround multiple INSERT statements with BEGIN...COMMITthen all the inserts are grouped into a single transaction. The time needed to commit the transaction is amortized over all the enclosed insert statements and so the time per insert statement is greatly reduced.

就insertion操作自身来看,每一次的调用都会默认被当成一次事务(transaction)来进行处理,其中就包含了开启、提交、结束事务等基本元操作。代码中的大量插入数据操作,使得这些基本操作被重复执行了N次。大块的执行时间无疑会被白白耗费掉。同时注意到Android SDK文档的SQLiteDatabase也给出了对于事务处理的标准调用方式:

db.beginTransaction();try {// do something     db.setTransactionSuccessful();}  finally {    db.endTransaction();}

OK, 贴图对比看下改进后同样的操作所耗费的时间吧 (debug下0.16s, 是的两者数量级相差有近百倍) ;)

转载请注明出处  http://www.cnblogs.com/raywalker/archive/2011/09/18/SQLite_insertion_optimization.html

转载于:https://www.cnblogs.com/raywalker/archive/2011/09/18/SQLite_insertion_optimization.html

SQLite中利用事务处理优化DB操作相关推荐

  1. 在SQLite中使用索引优化查询速度

    在进行多个表联合查询的时候,使用索引可以显著的提高速度,刚才用SQLite做了一下测试. 建立三个表: create table t1  (id integer primary key, num in ...

  2. android 组件 excel,Android中利用jxl组件来操作excel

    1.支持Excel 95-2000的所有版本,生成Excel 2000标准格式,支持字体.数字.日期操作,能够修饰单元格属性,支持图像和图表, 最关键的是这套API是纯Java的,并不依赖Window ...

  3. 利用对象池优化数据库操作

    简介:这是利用对象池优化数据库操作的详细页面,介绍了和asp.net,.Net,创建,对象池,示例有关的知识,要查看更多相关信息,请点击此处 说到对象池,大家都不陌生.很多人都实现过,网上的代码也满天 ...

  4. VC中利用ADO共同实现数据库的操作

    VC中利用ADO共同实现数据库的操作 ADO是应用层的编程接口,它通过OLE DB提供的COM接口访问数据,它适合于各种客户机/服务器应用系统和基于Web的应用,尤其在一些脚本语言中访问数据库操作是A ...

  5. 利用redis缓存对 list集合中的数据 进行分页操作(一)

    先说 存储的结构: 这里做了两块缓存  绿色是存储索引的缓存  黑色是存数据的缓存 翻页时需要两个参数  向上查询/或向下查询    还一个是   从第二页开始查询时需要一个索引的参数 有了这两个参数 ...

  6. mysql中的tee_详解mysql的tee功能 并利用其记录相关操作

    由于经常对mysql数据库进行大量的更改操作,比如更改字段,添加或删除索引等等,我们把这些操作放到sql语句中,然后登陆mysql,通过source执行该sql文件,为了做好相关记录,方便以后的工作中 ...

  7. mysql中利用sql语句修改字段名称,字段长度等操作(亲测)

    在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿.这些操作可以在phpmyadmin或者别的m ...

  8. Java中list如何利用遍历进行删除操作

    转: Java中list如何利用遍历进行删除操作 2018年03月31日 10:23:41 Little White_007 阅读数:3874 Java三种遍历如何进行list的便利删除: 1.for ...

  9. Oracle 19C优化器中自动使用了filter操作

    文章涉及问题和Oracle 19c版本及新特性并无直接关系,团队正在进行有条不紊的Oracle19c升级工作,刚好此版本遇到问题,影响大且波及范围广,故记录之,以便大家有他山石可引鉴.话不多说,看正文 ...

最新文章

  1. 云端迁移需谨遵四大关键步骤
  2. vs2015第二次装安装不能选择路径问题解决方法
  3. php动态修改配置文件
  4. linux下c的网络编程---转载
  5. 科目二倒车入库不论怎么都能入进去的方法
  6. 函数模块:CTVB_COMPARE_TABLES
  7. Python基础教程:对象的方法
  8. linkedin总共能加30000个好友
  9. 关于Android ViewPager 与 Fragment 一起使用碰到的问题
  10. STEAM教育风口正劲,如何培养STEAM思维?
  11. mysql 精度_mysql-笔记 精度
  12. hive sqoop导出 postgresql精度丢失_Mysql 与 hadoop 数据同步(迁移),你需要知道 Sqoop...
  13. @RequestParam详解
  14. java包装_Java罐密封包装
  15. G盘文件系统RAW要怎么办啊
  16. 【find】Linux中find常见用法示例
  17. softmax函数_干货 | 浅谈Softmax函数
  18. java 模板转PDF(合同)详细讲解
  19. STM8S103之IO复用
  20. 云原生的高效生产工具 ---vagrant

热门文章

  1. 算法竞赛入门经典 第二章总结
  2. 计算机二级考试开考多久能出来,【计算机二级】明天就要开考了,你们准备好了吗?...
  3. 算法提高 数的划分 动态规划 无序
  4. 计算机二级c语言填空题答案唯一吗,计算机二级C语言上机填空题及答案.doc
  5. linux 下i2c读写命令,S3C2440 Linux下的I2C驱动以及I2C体系下对EEPROM进行读写操作
  6. Java import static静态导入
  7. swift面向对象之方法
  8. ecshop活动页_ECSHOP团购活动,ECSHOP团购列表
  9. C++ 偏微分数值计算库_Windows下RTCGAToolbox库下载TCPA数据(RPPA)学习笔记
  10. java 保存文件在服务器_java文件保存至服务器