我的安卓应用程序使用的是一个在用户PC上生成并传输到设备上的SQLite数据库。这一切都是有效的,但我没有预料到会有多少用户拥有真正大量的数据。在这些情况下,UI非常缓慢,因为它等待获取数据。
我已经尝试了一些技巧,我“肯定”会加快速度,但似乎没有任何明显的效果。我的查询几乎都非常简单,通常是WHERE子句的单个"col=val“和列中的整数数据。所以我不能对这些查询做太多的事情。
最新的,我不是SQL专家,是在PC上使用"CREATE INDEX“命令,相信这些索引用于加速数据库搜索。索引显着增加了数据库文件的大小,所以我很惊讶它似乎对我的应用程序的速度没有任何影响!一个屏幕在没有索引的情况下需要8秒才能填满,即使有了索引也需要大约8秒。我希望能把事情降到至少一半。
在这一点上,我想知道的是,安卓上的SQLite实现是否使用了数据库索引,或者我只是在浪费空间生成它们。有人能回答这个问题吗?
另外,还有没有其他东西可以加快访问速度呢?
(无论它有什么价值,在绝对的基础上,用户没有什么可抱怨的。到目前为止,我的最坏情况下的用户有生成630,000条记录(15个表)的数据,所以只有这么多可能!)
Doug戈登GHCS系统
发布于 2010-11-29 05:30:17
如果索引适合查询,SQLite将使用该索引。使用EXPLAIN
EXPLAIN QUERY PLAN ... your select statement ...查看SQLite使用的是什么索引。查询计划基于对数据库内容的一些假设。您也许能够通过使用ANALYZE来改进计划
发布于 2010-12-06 08:56:43
通过以一种更高效的方式查询数据库,我终于能够获得巨大的性能提升。例如,在构建信息数组时,我以前使用"WHERE _id = n“类型选择器查询数据库中需要的每一行。但通过这种方式,我发出了十几个或更多的查询,一次一个。
相反,我现在构建了一个所需IN的列表,然后通过一个查询"WHERE _id IN (n1,n2,n3,...)“获得所有这些IN并遍历返回的游标。执行此操作和其他一些结构优化后,最大的数据库现在查看起来几乎与更普通的情况一样快。
发布于 2010-11-29 03:47:25
每次你要执行某种操作(数据库查找、长时间运行的计算、web请求等)花费超过几百毫秒的时间,您应该考虑将其包装在AsyncTask中。
Painless Threading是一篇关于这个主题的很好的文章,所以我建议您仔细研究一下。
本文讨论了安卓应用程序使用的线程模型,以及应用程序如何通过派生工作线程来处理长时间运行的操作,而不是在主线程中处理它们,从而确保最佳的UI性能。
https://stackoverflow.com/questions/4298542
复制相似问题