sql lite

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

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

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

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

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

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

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

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

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

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

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

sql lite