1

我对此有点迷茫。我有一个从具有 439397 条记录 (~32MB) 的静态 SQLite 数据库中读取的应用程序。

我在索引的列上查询数据库,但完成查询需要大约 8-12 秒。我正在使用的当前查询是对 id 列表执行 database.query(tableName, columnHeaders, "some_id=" + id) 。

我尝试使用“WHERE some_id IN (id1, id2, id3)”方法,但耗时是原来的两倍。我有一种感觉,我可能做错了。

查询是在 AsyncTask 中完成的,所以我不知道我还能做些什么来提高性能。

  • 更新:

我通过更改应用程序的行为解决了这个问题。

4

2 回答 2

0

看起来您在该字段上没有索引。请注意,如果您在实际查询中使用它们进行过滤/排序/分组,索引可能需要涵盖多个字段(无法详细说明,因为我还没有看到它)。

于 2012-06-21T16:40:08.940 回答
0

您可以使用它EXPLAIN QUERY PLAN来确认您的索引确实被正确使用。

您可以尝试使用 aCOUNT(*)而不是真正的列列表运行一次查询,以查看问题是否是从闪存存储中实际读取行数据的行为(如果有很多匹配项和很多大列,则可能) .

您可以尝试运行查询以匹配单个 ID(而不是其中 N 个),以开始尝试处理问题是否是太多比较。

但是,请记住,这AsyncTask并不能以某种方式让事情变得神奇地更快。它使事情神奇地不在主应用程序线程上运行。

于 2012-06-21T16:34:00.510 回答