android - 有什么有效的方法可以使 Android 数据库查询更快?

标签 android sqlite

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

编辑: 该应用程序是“拼字游戏求解器”,这就是为什么我没有在查询中使用 WHERE 子句的原因(获取全部数据并将其与输入字母)。起初我使用的是一个大表格,其中包含所有可能的单词。现在我正在使用 26 个表。这减少了延迟,我在一个线程上进行数据库调用——这也解决了很多问题。它仍然有点滞后,但好多了。

最佳答案

总结一下再补充一点

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

关于android - 有什么有效的方法可以使 Android 数据库查询更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3632827/

相关文章:

java - 如何查找并调试实际代码行 Java 错误 : Fatal Exception: java. lang.IndexOutOfBoundsException:

android - 在设备上创建位图时内存不足

android - 对话框按钮中的 OnClickListener 被调用两次,处理时间长

android - VACUUM 结果为 "Unable to open database file"

postgresql - 将 SQLite 转储迁移到部署在 Kubernetes 上的 PostgreSQL

c# - 将 .Net 实体数据模型与 SQLite 结合使用

android - OkHttp 不断收到 StreamResetException : stream was reset: INTERNAL_ERROR when it's 200

android - 在 gradle 构建期间更新 README.md 中的版本号

android - 跟踪移动本地数据库和可选云数据库之间的已删除条目

Android cursor.getColumnNames() 不包含新添加的列