首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android variable SQLite select查询性能-有什么解释吗?

Android variable SQLite select查询性能-有什么解释吗?
EN

Stack Overflow用户
提问于 2012-02-16 03:25:54
回答 1查看 487关注 0票数 1

我有一个SQLite数据库,表中有6,000多行地址。这是一个只读数据库-应用程序构建和部署后没有更新或更改。我在state字段上有一个索引。我的应用程序使用一个简单的select语句来获取与给定状态匹配的所有行。我使用explain和explain查询计划语句来查看我的查询是否使用了索引。

大多数情况下,查询返回的时间不到一秒钟-不是很好,但对于我的应用程序来说已经足够好了。

查询通常需要更长的时间--甚至长达14秒,通常是3-4秒。在同一电话上的完全相同的只读数据库(和表)上的完全相同的查询,由完全相同的二进制调用。

我可以看到没有垃圾收集正在发生,并且监视logcat也没有生成异常

只是有时会发生一些变化。创建不一致的用户体验的变体。

看起来SQLite数据库系统正在被其他应用程序共享--比如电子邮件客户端。会不会是我的查询排在另一个应用程序的查询之后,因此差异是由于共享SQLite数据库系统实际开始运行我的查询?如果是这样,是否可以“创建我自己的SQLite实例”,以便获得一致的性能?

如果它不是一个共享的SQLite数据库系统(因此我有自己的实例),那么在其他条件相同的情况下,还有什么原因会导致查询性能出现如此大的差异?

请注意,我不能轻松地将数据放入内存中运行查询,因为行很长(除了地址之外还有更多信息),而且我的代码中还有许多其他部分使用了更复杂的select查询。我已经将性能差异缩小到这个问题的最简单的"select where state =“查询(请求帮助)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-16 03:33:17

似乎SQLite数据库系统正在被其他应用程序共享-例如电子邮件客户端。

不完全同意。存储空间由其他应用程序共享。在Android1.x和大多数2.x设备上,内部存储是格式化的YAFFS2,一次只允许一个进程访问存储。对于运行ext4而不是YAFFS2的Android 3.0+设备(以及大约2.3台设备)来说,这应该不是什么大问题。

会不会是我的查询排在另一个应用程序的查询之后,因此差异是由于共享的SQLite数据库系统实际开始运行我的查询?

不完全同意。不过,您的磁盘I/O可能排在另一个应用程序的磁盘I/O之后。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9299891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档