Android开发之SQLite优化

本文原地址为:http://blog.csdn.net/horkychen/article/details/18892223

关于SQLite的优化,首先是能用SQL语句批次处理的,就不要单笔操作,Cursor就更是能不用就不用。比如成批的DELETE/UPDATE,将条件组装到SQL语句,会比使用CURSOR一条条的查再删效率要高很多(若干年前就曾使用存储过程代替单笔操作,将一次批量计算时间从一天缩到了数分钟以内,参考)。其次是对操作的优化:对于INSERT/UPDATE操作较多时使用事务,如果SELECT操作较多时,使用索引。

结合现在的工作,发现针对操作的优化,下面这篇文章可以翻译出来归档。以下为正文:

SQLite有一个简洁的SQL接口,且以低内存占用著称。现如今,SQLite已经在Android及iOS开发中得到广泛的应用。本文主要讨论在Android应用如何优化SQLite的性能和资源占用。

1, 使用事务(Transaction)

在 默认情况下每一个SQL语句都被包一个全新的事务内,比如执行一个如INSERT这样基本的数据库操作,就会放到一个新创建的事务中执行。一次只需要操作 一次数据库操作时,让SQLite自己来进行事务管理当然是明智的。但如果一次有大量的操作要做时,比如循环调用INSERT添加时,这样就显得开销过大 了,因为每一笔操作都要重新打开、写入,最后再关闭journal文件, 这个文件是临时用来保存数据操作的中间结果,详细内容看这里(参考)。

如果明确地在一系列SQL语句前后以BEGIN TRANSACTION及END TRANSACTION这样显示地使用事务就可以避免上面的情况。对于那些不会改变数据的操作,这样的方式也同样可以提速(好似数据库操作中单笔的操作效率将远低于批次操作,如果用SQL语句可以搞定的事,就不可使用Cursor进行操作)。

注明:除了发起事务外,你必须还要负责对事务的提交和回滚操作。

在Android应用开发中可以使用类似如下的方式使用BEGIN TRANSACTION及END TRANSACTION:

[java] view plaincopyprint?

  1. <span style="font-family:Microsoft YaHei;">db.beginTransaction();
  2. try{
  3. for(int i =0; i< LENGTH ; i++,sequenceNum++)
  4. {
  5. // execute SQL
  6. }
  7. db.setTransactionSuccessful();// marks a commit
  8. }
  9. finally{
  10. db.endTransaction();
  11. }</span>

2. 使用索引

如果没有在数据库使用索引,当你在一个没有排序的数据表中使用映射查询(projection query)搜索时,无可避免的要执行一个全序列查找。这种情况通常并不是什么问题,每种数据库,包括SQLite都会为数据集执行索引来降低查找时间。

索引维护着一个表中某一列或某几列的顺序,这样就可以快速定位到一组值,而不用扫遍全表。所有的索引信息会被保存在一个独立的索引表中,所以会产生额外的空间占用,不过绝对物超所值,特别是当你会在数据库中进行大量的读及搜索操作时。

SQLite会自动为每一个UNIQUE栏位创建索引,包括主键(Primary Key)栏位,另外也可以通过CREATE INDEX进行显示地创建。

注:如果你的查询太复杂而无法使用所创建的索引,那你就要好好想想你数据库的结构了。

3. 在Where分支中使用限定符

如果以字串拼接出SQL语句的Where,莫不如使用SQLite的query操作带上‘?‘来编译查询。以下是它的好处:

a. 有利于SQLite缓存这些查询及索引。

b. 可以避免达到SQLite缓存的上限。使用字串拼接Where的查询,每一个都被视为不同的查询,这就容易达到缓存的上限。

c. 可以避免非法的SQL注入。

参考:

1.SQLite查询优化性能要点

2. Android SQLiteDatabase

3.   Android SQLite性能分析

Android开发之SQLite优化,布布扣,bubuko.com

时间: 2024-08-09 19:53:17

Android开发之SQLite优化的相关文章

Android开发之SQLite数据库详解

Android开发之SQLite数据库详解 请尊重他人的劳动成果,转载请注明出处:Android开发之SQLite数据库详解 http://blog.csdn.net/fengyuzhengfan/article/details/40194393 Android系统集成了一个轻量级的数据库:SQLite, SQLite并不想成为像Oracle.MySQL那样的专业数据库.SQLite只是一个嵌入式的数据库引擎,专门适用于资源有限的设备上(如手机.PDA等)适量数据存取. 虽然SQLite支持绝大

[转]ANDROID开发之SQLite详解

SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小. 2.独立性 SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”. 3.隔离性 SQLite 数据库中所有的信息(比如表.视图.触发器等)都包含在一个文件夹内,方便管理和维护. 4.跨平台 SQLit

ANDROID开发之SQLite详解

===================== 转自:http://www.cnblogs.com/Excellent/archive/2011/11/19/2254888.html ===================== SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小.

Android开发之SQLite的使用方法

前言 SQLite是一种轻量级的小型数据库,虽然比较小,但是功能相对比较完善,一些常见的数据库基本功能也具有,在现在的嵌入式系统中使用该数据库的比较多,因为它占用系统资源很少.Android系统中也不例外,也是采用SQLite,本节中就学习下在andorid中怎样使用该数据库来存放数据,并且对SQLite完成简单的新建,更新,查询,删除等操作. 实验说明: Android中使用SQLite数据库时,需要用adb来辅助调试,如果想在windows下的cmd命令行中使用adb,必须先配置环境变量,我

android开发之 SQLite(数据库)

SQLite数据库存储:SQLite是一款轻量级的关系型数据库,它的运算速度非常快, 占用资源很少,通常只需要几百 K的内存就足够了,因而特别适合在移动设备上使用. 第一: 创建一个数据库.(Android为了让我们能够更加方便地管理数据库,专门提供了一个 SQLiteOpenHelper帮 助类,借助这个类就可以非常简单地对数据库进行创建和升级.) SQLiteOpenHelper是一个抽象类,这意味着如果我们想要使用它的话, 就需要创建一个自己的帮助类去继承它.SQLiteOpenHelpe

Android开发之sqlite数据库的练习

一.目标 通过employee员工类来做例子练习sqlite数据库的创建更新以及增删改查,并使用sqlite expert可视化软件来检查数据库的操作. 二.具体步骤 (1)创建sqlite数据库 第一步:建立一个Help类继承sqliteOpenHelper类来创建数据库,实现SQLiteOpenHelper的接口,并添加一个构造方法.父类构造方法需要有4个参数,数据库的名字和数据库的等级另外创建一个常量类类保存,并且这种的名字一般都全部大写,Ctrl+Shift+U可以快捷全部换成大写 /*

【转】Android开发之旅:应用程序基础及组件

为了后面的例子做准备,本篇及接下来几篇将介绍Android应用程序的原理及术语,这些也是作为一个Android的开发人员必须要了解,且深刻理解的东西.本篇的主题如下: 1.应用程序基础 2.应用程序组件 2.1.活动(Activities) 2.2.服务(Services) 2.3.广播接收者(Broadcast receivers) 2.4.内容提供者(Content providers) 因为这些内容比较理论,且没有用例子来说明,看上去会比较枯燥,我就把这几篇写得算比较短,方便大家吸收. 1

Android开发之Tween(补间动画)完全解析(下)

欢迎转载,转载请注明出处:http://blog.csdn.net/dmk877/article/details/51980734 在上一篇文章中,我们详细讨论了Tween动画的xml的实现以及interpolator的使用,相信通过上篇文章大家对Tween动画的xml属性的配置会有一个详细的理解,当然这篇文章也是承接上篇文章,所以强烈建议先阅读上篇文章:Android开发之Tween(补间动画)完全解析(上),这篇文章将从代码的角度实现上篇文章的效果.如有疑问请留言,如有谬误欢迎批评指正. T

Android开发之JSON使用

Android开发之JSON使用 今天在论坛看到有不少朋友问关于json的问题,所以想写一篇关于android中使用json的博客. 首先 json是什么 JSON的全称是JavaScript Object Notation,从这里可以看到它源于JavaScript,它采用文本形式体现.比如 {"name":"zhangsan","age":20,"wife":"如花"} 这个简单表示了一个对象,在java