![sql面试题](https://i-blog.csdnimg.cn/blog_migrate/32f2238a5eb802fafe1af48e33d9d765.png)
sql面试题
根据您使用的版本,给定查询可能会在毫秒或分钟内运行。 例如,在Galaxy S2上运行不到一秒钟的查询(在iPhone 4上甚至更快),在Atrix 2和HTC Desire上完成一整分钟的查询即可。 所有这些手机在硬件方面都相对相似,那么有什么区别呢?
在研究和分析了几天的代码后,归结为如何设计查询。 当使用任何大型联接或联合时,就会出现问题。 在许多手机上,很难看到速度有很大的下降。 需要非常仔细地优化将一个大型表与一个或多个中型表结合使用,以确保在所有设备上都具有良好的性能。 在计算任何联合或联接之前限制任何大表的大小非常重要。
考虑以下具有三个表的示例数据库。
- 人员表,其中包含人员的姓名,身高,年龄等详细信息
- 家庭表,其中包含有关家庭的详细信息
- 城市表,其中包含所有家庭所在的几个城市
在Android中将所有三个表连接在一起(假设Persons表至少有2000个条目)在大多数设备上都可以正常工作。 如果您的用户不幸的是使用较旧SQL Lite版本,则您的应用程序将无法使用。 确保几个大表之间的任何主要连接都尽可能小,以确保所有设备上的性能都可接受。 例如,如果有可能从Persons表中拉出一个子集(通过删除一个数量级),您将看到性能上的巨大提高。
棘手的部分是确定给定设备实际使用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面试题