在我的 Android 应用程序中,我需要获取 50,000 个数据库条目(文本)并将它们与 Activity 开始时的值进行比较(在 onCreate()
中)。我用最简单的方法来做到这一点:我将整个表从 db 获取到游标。但是这种方式太滞后了。有没有其他方法可以更有效地做到这一点?
编辑: 该应用程序是“拼字游戏求解器”,这就是为什么我没有在查询中使用 WHERE
子句的原因(获取全部数据并将其与输入字母)。起初我使用的是一个大表格,其中包含所有可能的单词。现在我正在使用 26 个表。这减少了延迟,我在一个线程上进行数据库调用——这也解决了很多问题。它仍然有点滞后,但好多了。
最佳答案
总结一下再补充一点
- 让数据库为您进行搜索,在执行查询时使用 WHERE 子句!
- 如果您的 where 子句不对主键列或唯一列进行操作,您应该为该列创建索引。以下是有关如何执行此操作的一些信息:http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html#indexes
- Google 说:“使用问号参数标记,例如‘phone=?’而不是选择参数中的显式值,以便仅这些值不同的查询将被识别为相同的缓存目的。”
- 使用
EXPLAIN QUERY PLAN
运行查询分析 http://www.sqlite.org/lang_explain.html并查找任何scan
操作,这些操作比search
操作慢得多。使用索引来避免扫描
操作。 - 不要在
onCreate()
中执行任何耗时的任务,始终使用AsyncTask
、在后台线程上运行的Handler
或其他一些非主线程。 - 如果您需要进行全文搜索,请阅读:http://www.sqlite.org/fts3.html
关于android - 有什么有效的方法可以使 Android 数据库查询更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3632827/