从sqlite db中选择(包含101000条记录)需要10秒以上(在Android应用程序中)

时间:2014-03-01 06:30:49

标签: android sql sqlite

我有一个超过100,000条记录的Db,当我想从db中选择50条记录(通过使用限制)时,它需要超过10秒的时间,在旧设备中需要18秒。 对这个问题有什么想法吗? 这样使用神奇的主键还是......?

我认为我必须将我的数据分成几个表或一些数据库,因为我的代码很好,并且从sqlite引擎检索数据对于这个数据量来说是如此之慢。

我的表结构是:

createdb="CREATE TABLE `sms` ("
                    + " `_id` INTEGER PRIMARY KEY AUTOINCREMENT, "
                    + "`categorys` INTEGER NOT NULL,  "
                    + " `text` text NOT NULL, "
                    + " `rate` INTEGER OT NULL,"
                    + " `sended` INTEGER OT NULL,"
                    + " `deleted` INTEGER OT NULL,"
                    + " `liked` INTEGER OT NULL,"
                    + " `readed` INTEGER OT NULL,"
                    + " `shared` INTEGER OT NULL,"
                    + " `length` INTEGER OT NULL"
                    + ");";

            startInsertStr="insert into sms (text,categorys,rate,sended,deleted,liked,readed,shared,length) VALUES('";
            endInsertStr = ",-1,-1,-1,-1,-1,0);\n";

我从文件中读取数据,将它们插入到具有上述结构的db中,但是当我选择这样的内容时:

select * from sms where categorys=5 order by rate desc  limit 0,50 

检索数据需要10秒以上的时间。

1 个答案:

答案 0 :(得分:3)

似乎索引会显着加快速度;

CREATE INDEX `ix_categorys_rate_d` ON `sms`(`categorys`, `rate` DESC);

如果您没有索引,则查询将需要扫描所有行以获得结果,而索引将允许它非常有效地查找该类别中的所有行,并且已按rate DESC对其进行排序。