SQLite中利用事务处理优化DB操作
前几天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操作相关推荐
- 在SQLite中使用索引优化查询速度
在进行多个表联合查询的时候,使用索引可以显著的提高速度,刚才用SQLite做了一下测试. 建立三个表: create table t1 (id integer primary key, num in ...
- android 组件 excel,Android中利用jxl组件来操作excel
1.支持Excel 95-2000的所有版本,生成Excel 2000标准格式,支持字体.数字.日期操作,能够修饰单元格属性,支持图像和图表, 最关键的是这套API是纯Java的,并不依赖Window ...
- 利用对象池优化数据库操作
简介:这是利用对象池优化数据库操作的详细页面,介绍了和asp.net,.Net,创建,对象池,示例有关的知识,要查看更多相关信息,请点击此处 说到对象池,大家都不陌生.很多人都实现过,网上的代码也满天 ...
- VC中利用ADO共同实现数据库的操作
VC中利用ADO共同实现数据库的操作 ADO是应用层的编程接口,它通过OLE DB提供的COM接口访问数据,它适合于各种客户机/服务器应用系统和基于Web的应用,尤其在一些脚本语言中访问数据库操作是A ...
- 利用redis缓存对 list集合中的数据 进行分页操作(一)
先说 存储的结构: 这里做了两块缓存 绿色是存储索引的缓存 黑色是存数据的缓存 翻页时需要两个参数 向上查询/或向下查询 还一个是 从第二页开始查询时需要一个索引的参数 有了这两个参数 ...
- mysql中的tee_详解mysql的tee功能 并利用其记录相关操作
由于经常对mysql数据库进行大量的更改操作,比如更改字段,添加或删除索引等等,我们把这些操作放到sql语句中,然后登陆mysql,通过source执行该sql文件,为了做好相关记录,方便以后的工作中 ...
- mysql中利用sql语句修改字段名称,字段长度等操作(亲测)
在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿.这些操作可以在phpmyadmin或者别的m ...
- Java中list如何利用遍历进行删除操作
转: Java中list如何利用遍历进行删除操作 2018年03月31日 10:23:41 Little White_007 阅读数:3874 Java三种遍历如何进行list的便利删除: 1.for ...
- Oracle 19C优化器中自动使用了filter操作
文章涉及问题和Oracle 19c版本及新特性并无直接关系,团队正在进行有条不紊的Oracle19c升级工作,刚好此版本遇到问题,影响大且波及范围广,故记录之,以便大家有他山石可引鉴.话不多说,看正文 ...
最新文章
- 云端迁移需谨遵四大关键步骤
- vs2015第二次装安装不能选择路径问题解决方法
- php动态修改配置文件
- linux下c的网络编程---转载
- 科目二倒车入库不论怎么都能入进去的方法
- 函数模块:CTVB_COMPARE_TABLES
- Python基础教程:对象的方法
- linkedin总共能加30000个好友
- 关于Android ViewPager 与 Fragment 一起使用碰到的问题
- STEAM教育风口正劲,如何培养STEAM思维?
- mysql 精度_mysql-笔记 精度
- hive sqoop导出 postgresql精度丢失_Mysql 与 hadoop 数据同步(迁移),你需要知道 Sqoop...
- @RequestParam详解
- java包装_Java罐密封包装
- G盘文件系统RAW要怎么办啊
- 【find】Linux中find常见用法示例
- softmax函数_干货 | 浅谈Softmax函数
- java 模板转PDF(合同)详细讲解
- STM8S103之IO复用
- 云原生的高效生产工具 ---vagrant
热门文章
- 算法竞赛入门经典 第二章总结
- 计算机二级考试开考多久能出来,【计算机二级】明天就要开考了,你们准备好了吗?...
- 算法提高 数的划分 动态规划 无序
- 计算机二级c语言填空题答案唯一吗,计算机二级C语言上机填空题及答案.doc
- linux 下i2c读写命令,S3C2440 Linux下的I2C驱动以及I2C体系下对EEPROM进行读写操作
- Java import static静态导入
- swift面向对象之方法
- ecshop活动页_ECSHOP团购活动,ECSHOP团购列表
- C++ 偏微分数值计算库_Windows下RTCGAToolbox库下载TCPA数据(RPPA)学习笔记
- java 保存文件在服务器_java文件保存至服务器