Android上的SQL Lite性能

对于那些不知道的人,Android提供了一些内置来支持SQL Lite数据库的使用。 它提供了一种在Android中构建少量数据的好方法。 但是,使用这些类有一些陷阱,但是您应该注意。

根据您使用的版本,给定查询可能会在毫秒或分钟内运行。 例如,在Galaxy S2 (甚至在iPhone 4上甚至更快)上运行的查询不到一秒钟,就需要一整分钟才能在Atrix 2和HTC Desire上完成。 所有这些手机在硬件方面都相对相似,那么有什么区别呢?

在研究和分析了几天的代码后,归结为如何设计查询。 当使用任何大的联接或联合时,就会出现问题。 在许多手机上,很难看到速度有很大的下降。 需要非常仔细地优化将一个大型表与一个或多个中型表结合使用,以确保在所有设备上都具有良好的性能。 在计算任何联合或联接之前,限制任何大表的大小非常重要。

考虑以下具有三个表的示例数据库。

  • 人员表,其中包含人员的姓名,身高,年龄等详细信息
  • 家庭表,其中包含有关家庭的详细信息
  • 城市表,其中包含所有家庭所在的少数城市

在Android中将所有三个表连接在一起(假设Persons表至少有2000个条目)在大多数设备上都可以正常工作。 如果您的用户不是SQL较旧版本的不幸用户,则您的应用程序将无法使用。 确保几个大表之间的任何主要联接都尽可能小,以确保所有设备的性能都可接受。 例如,如果可以从“人员”表中拉出一个子集(通过删除一个数量级),则性能将得到极大提高。

棘手的部分是确定给定设备实际使用的SQL Lite版本。 尽管Android确实将某个版本烘焙到给定的OS版本中,但制造商似乎在不同的设备上具有不同的SQL Lite版本。 试图弄清楚给定设备的SQL Lite版本时,这可能会引起很大的麻烦。

这是关于StackOverFlow的一些信息。 弄清楚给定手机上安装了什么版本的SQL Lite可能很麻烦。 您最好先花一些额外的时间在查询上,以确保现在(而不是以后)在Android上获得良好的性能。

关于Android SQL Lite类的另一个有趣的事实涉及何时在给定数据库上实际执行查询。 您会认为当您收到Cursor对象时,查询实际上将被执行。 但事实证明,直到实际使用光标后才执行查询(例如第一个moveToNextmoveToFirst时 )。 因此,重要的是要确保UI线程附近的任何地方都没有使用光标。

参考: Programming Mobile博客的JCG合作伙伴 Isaac Taylor提供了Android上的SQL Lite性能


翻译自: https://www.javacodegeeks.com/2012/04/sql-lite-performance-on-android.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值