有没有有效的方法使Android数据库查询更快?

在我的Android应用程序中,我需要获取50,000个数据库条目(文本),并在活动开始时将其与值进行比较(在onCreate() )。 我用最简单的方式做到这一点:我将整个表从db传递到游标。 然而,这种方式太迟钝了。 有没有其他方法可以更有效地做到这一点?

编辑:该应用程序是“拼字游戏解算器”,这就是我在查询中不使用WHERE子句的原因(获取整个数据并将其与输入字母的组合进行比较)。 起初我正在使用一个包含完整可能单词的大表。 现在我使用26张桌子。 这减少了滞后,我在一个线程上进行数据库调用 – 这也解决了很多问题。 它仍然有点滞后但更好。

总结并添加一点

  1. 让数据库完成搜索工作,在执行查询时使用WHERE子句!
  2. 如果where子句不在主键列或唯一列上运行,则应为该列创建索引。 以下是有关如何执行此操作的一些信息: http : //web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html#indexes
  3. 谷歌说:“使用问号参数标记,例如’phone =?’ 而不是选择参数中的显式值,以便只有这些值不同的查询才会被识别为缓存目的。“
  4. 使用EXPLAIN QUERY PLAN http://www.sqlite.org/lang_explain.html运行查询分析并查找任何scan操作,这些操作比search操作慢得多。 使用索引来避免scan操作。
  5. 不要在onCreate()执行任何耗时的任务,总是使用AsyncTask ,在后台线程或其他非主线程上运行的Handler
  6. 如果您需要进行全文搜索,请阅读: http : //www.sqlite.org/fts3.html

您永远不应该在UI线程中读取数据库。 通过AsyncTask或使用常规线程使用后台线程。 这将解决您的UI滞后问题。

使数据库读取更快将有助于更快地将数据带给用户,但更重要的是获取数据不会阻止用户使用该应用程序。

查看以下链接:

Android中的无痛线程

YouTube:编写Zippy Android应用程序

在SQL中使用WHERE子句而不是读取整个内容。然后在WHERE子句中的列上添加索引。

至少你可以在你比较的字段上放置索引并使用WHERE子句。 如果您正在比较数字Sqlite(Android使用的数据库引擎)支持MINMAX等function。 此外,如果您要比较部分字符串,您可以使用LIKE 。 对于查询优化,有许多资源, 例如这样