在我的Android应用程序中,我需要获取50,000个数据库条目(文本),并在活动开始时(在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运行查询分析并查找任何扫描操作,这些操作比搜索操作慢得多.使用索引来避免扫描操作.
>不要在onCreate()中执行任何耗时的任务,总是使用AsyncTask,在后台线程或其他非主线程上运行的Handler.
>如果您需要进行全文搜索,请阅读:http://www.sqlite.org/fts3.html