在我的Android应用中,我需要获取50,000个数据库条目(文本),并在活动开始时将其与值进行比较(在onCreate()
中)。我用最简单的方法做到这一点:我将整个表从db到光标。然而这种方式太迟钝了。有没有其他方法可以更有效地做到这一点?
编辑:该应用是“拼字游戏解算器”,这就是我在查询中不使用WHERE
子句的原因(获取整个数据并将其与输入字母的组合进行比较) 。起初我正在使用一个包含完整可能单词的大表。现在我使用26张桌子。这减少了滞后,我在一个线程上进行数据库调用 - 这也解决了很多问题。它仍然有点滞后但更好。
答案 0 :(得分:9)
总结并添加更多内容
EXPLAIN QUERY PLAN
http://www.sqlite.org/lang_explain.html运行查询分析并查找任何scan
操作,这些操作比search
操作慢得多。使用索引来避免scan
操作。onCreate()
,在后台线程或其他非主线程上运行AsyncTask
。答案 1 :(得分:2)
您永远不应该在UI线程中读取数据库。通过AsyncTask或使用常规线程使用后台线程。这将解决您的UI延迟问题。
使数据库读取更快将有助于更快地将数据带给用户,但更重要的是,获取数据不会阻止用户使用该应用程序。
查看以下链接:
答案 2 :(得分:1)
在SQL中使用WHERE子句而不是读取整个内容。然后在WHERE子句中的列上添加索引。
答案 3 :(得分:1)
至少你可以在你比较的字段上加上索引并使用WHERE
子句。如果您要比较数字Sqlite(Android使用的数据库引擎)支持MIN
和MAX
等功能。此外,如果您要比较部分字符串,可以使用LIKE
。对于查询优化,有许多资源such as this