1.利用android提高的的insert,query,update,deleteAPI与execSql,rawQuery函数执行原生的插入,查询,更新,删除语句操作花费时间的对比结果


在相同的环境(adnroid4.0)和相同的机器下执行相同的动作,记录条数也一样的情况下的对比,多次验证的如下:

(1)如果批量执行的记录数在1000条,则Android SqliteDatabase提供的insert,query,update,delete函数和直接写SQL文的execSql,rawQuery的效率差不多,几乎一样。所以使用哪种方式都可以,不会影响到执行效率。

(2)如果批量执行的记录数在10万条,则会存在差别。在某台手机上SqliteDatabase提供的insert执行插入操作耗时45秒,要比execSql插入35秒慢10秒左右。

可见在数据库大的情况下,还是有差别的。execSql省去了拼接sql语句的步骤,要比SqliteDatabase提供的insert,query,update,delete等函数效率高。当数据库越大,差别也越大。

2.Sqlite数据库批量操作效率的问题


        应用程序初始化时需要批量的向sqlite中插入大量数据,单独的使用for+Insert方法导致应用响应缓慢, 因为  SQLite的数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实都会转化为对文件的操作,而频繁的文件操作将会是一个很耗时的过程,会极大地影响数据库存取的速度。sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操作。初始5000条记录也就是要5000次读写磁盘操作, 将会重复的打开关闭数据库文件5000次,所以速度当然会很慢。而且不能保证所有数据都能同时插入。

解决方法:

添加事务处理,把5000条插入作为一个事务

我们使用SQLite的事务进行控制:

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

try{

//批量处理操作

for(Collection c:colls){

insert(db, c);

}

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

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

}catch(Exception e){

MyLog.printStackTraceString(e);

}finally{

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

}

这样SQLite将把全部要执行的SQL语句先缓存在内存当中,然后等到COMMIT的时候一次性的写入数据库,这样数据库文件只被打开关闭了一次,效率自然大大的提高

看完本文有收获?请转发分享给更多人


欢迎关注“互联网架构师”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构,不聊其他!打造最有价值的架构师圈子和社区。

本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。

  • 长按下方的二维码可以快速关注我们

  • 如想加群讨论学习,请点击右下角的“加群学习”菜单入群

Android上SQLite的性能优化问题相关推荐

  1. Android 进阶第二篇——性能优化

    Android 进阶第二篇--性能优化 一些Android书籍喜欢把性能优化放在最后的章节,简单提一提作为内容全面的点缀.在这里我将工具使用和性能优化的一些个人经验放在进阶系列博客的开始,因为我认为防 ...

  2. Android开发中的性能优化(摘录:陈彧堃演讲实录)

    大家好!我是陈彧堃,其实HTML5我之前也做过一些相关的研究,包括现在我们也在做一些调研.我个人一年前在G3上利用HTML5开发一些东西的时候,我发现原生的对HTML不支持,开始踏踏实实做Androi ...

  3. Android系统开发和性能优化——查漏补缺【建议收藏】

    做了这么久性能相关的工作,也接触了不少模块,说实话要做好性能这一块,真心不容易.为什么这么说? 是因为需要接触的知识实在是太多了, Android 是一个整体,牵一发而动全身,不是说只懂一个模块就可以 ...

  4. MySQL史上最全性能优化方式

    MySQL有哪些性能优化方式?这个问题可以涉及到 MySQL 的很多核心知识,就像要考你计算机网络的知识时,问你"输入URL回车之后,究竟发生了什么"一样,看看你能说出多少了. 所 ...

  5. 深入浅出计算机组成原理学习笔记:SSD硬盘(上)-如何完成性能优化的KPI?(第46讲)...

    一.引子 随着3D垂直封装技术和QLC技术的出现,今年的"618",SSD硬盘的价格进一步大跳水,趁着这个机会,我把自己电脑上的仓库盘,从HDD换成了SSD硬盘.我的个人电脑彻底摆 ...

  6. Android Studio 忽略_Android性能优化--启动优化

    1. 前言 一个应用App的启动速度能够影响用户的首次体验,启动速度较慢(感官上)的应用可能导致用户再次开启App的意图下降,或者卸载放弃该应用程序.本文会通过以下几个方面来介绍应用启动的相关指标和优 ...

  7. 转:MySQL史上最全性能优化方式

    一.设置索引 索引是一种可以让SELECT语句提高效率的数据结构,可以起到快速定位的作用. 索引的优缺点: 优点:某些情况下使用select语句大幅度提高效率,合适的索引可以优化MySQL服务器的查询 ...

  8. android之java程序性能优化(不断补充)

    在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. 一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循 ...

  9. android之java程序性能优化

    在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. 一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循 ...

  10. Android大图片背景性能优化篇

    内存优化-Android大图片 最近在做一个游戏项目,项目中使用大量的1080P作为背景图片,整个APP内存很快就超过峰值,导致项目中出现多处内存溢出.掉帧现象. Meizu Mx4pro(260M左 ...

最新文章

  1. 生产者与消费者(二)---await与 signal
  2. SAP CRM BSP URL 302 redirect
  3. Altera 速度等级
  4. jquery/原生js/css3 实现瀑布流以及下拉底部加载
  5. Graphviz 入口
  6. 关于 Visual Studio 2017 ,或2019 ,Installer 没检测到已安装的程序.以及C++ 创建项目失败...
  7. Pr 音频效果参考:特殊效果
  8. fig r函数_R语言图形函数par()参数应用举例.pdf
  9. 压缩包文件跟html不一样,为什么压缩文件还是那么大
  10. manjaro命令和linux命令不一样,Manjaro: 一种不同的野兽
  11. 群贤路附近哪有计算机学校,群贤路口附近展览馆、会展中心
  12. 拉格朗日方法求最优解
  13. Android高德地图使用自定义指南针
  14. 电子驱蚊器就是智商税
  15. 信息学奥赛一本通C++语言-----1087:级数求和
  16. 大数据Kylin(一):基础概念和Kylin简介
  17. 拼多多Java岗校招-4面获得年薪66万offer
  18. 哈工大版理论力学和濮良贵版《机械设计》、张宇数学二等视频和试卷分享
  19. 实训二:交换机的配置模式
  20. 找工作,在51job和chinahr上投了很多简历,回复的太少了。帮忙看下我的简历

热门文章

  1. Sublime Text 3 破解版 + 注册机 + 汉化包 + 教程
  2. Centos rsync配置
  3. 什么是dos及常见命令详解
  4. jStat:轻量级Javascript统计库
  5. Google 产品速查手册大全
  6. C#编译器对泛型方法调用作类型推断的奇怪问题
  7. pip安装软件报错:Cannot uninstall 'requests'. It is a distutils installed.........
  8. linux学习 建立静态库,动态库,写简单的makefile
  9. 在 Mac 上如何放大或缩小?
  10. 如何更换 Mac 登录画面的背景桌面?