我对此感到很失落。我有一个应用程序正在读取具有439397条记录(~32MB)的静态SQLite数据库。
我在索引的列上查询数据库,但完成查询需要大约8-12秒。我正在使用的当前查询是执行database.query(tableName,columnHeaders,“some_id =”+ id)以获取id列表。
我试过做“WHERE some_id IN(id1,id2,id3)”的方法,但这花费了两倍的时间。我有一种感觉,我可能做错了。
查询是在AsyncTask中完成的,所以我对于我可以做些什么来改善性能感到迷茫。
我通过更改应用程序的行为来解决问题。
答案 0 :(得分:0)
您可以使用EXPLAIN QUERY PLAN
确认您的索引确实正在使用。
您可以尝试使用COUNT(*)
而不是真实列列表运行查询一次,以查看问题是否实际上是从闪存存储中读取行数据(如果有很多可能比赛和许多大栏目。)
您可以尝试运行查询以匹配单个ID(而不是N个),以开始尝试处理问题是否过多的比较。
但是,请记住,AsyncTask
并不能以某种方式让事情神奇地变得更快。它使得主要应用程序线程无法运行。
答案 1 :(得分:0)
看起来你没有该字段的索引。请注意,如果您在真实查询中使用它们进行过滤/排序/分组,则索引可能需要涵盖多个字段(由于我还没有看到它,因此无法详细说明)。