sqlite 在160 GB的数据库中,SELECT需要很长时间

x8diyxa7  于 2022-11-15  发布在  SQLite
关注(0)|答案(1)|浏览(122)

我有一个160 GB的SQLite数据库。表hwmpid列和stage列上有索引。

CREATE INDEX idx_hwmp_id ON hwmp (id, stage);

当我计算行数时,查询在0.09秒内返回。

sqlite> select count (*) from hwmp where id = 2000 and stage = 4;
59397
Run Time: real 0.091 user 0.000074 sys 0.080494

然而,对于一个精选的所有实时时间是85秒。用户和系统的时间加起来只有2.5秒。为什么实时时间会这么高?

select * from hwmp where id = 2000 and stage = 4;
Run Time: real 85.420 user 0.801639 sys 1.754250

如何修复它?另一个对sqlite3数据库(300MB)的查询在20ms内返回。今天,它用了652毫秒。

Run Time: real 0.652 user 0.018766 sys 0.010595

今天的Linux环境出了问题。我把同样的SQLite下载到我的Mac上,它运行得很快。

Run Time: real 0.028 user 0.005990 sys 0.010420

它使用的是索引:

sqlite> explain query plan select * from hwmp where id = 78 and stage = 4;
QUERY PLAN
`--SEARCH hwmp USING INDEX idx_hwmp_id (id=? AND stage=?)
Run Time: real 0.005 user 0.000857 sys 0.000451
ao218c7q

ao218c7q1#

相关设置为pragma cache_size = 200000; 200000页,4096字节。在设置之后,对于第一次查询,大约需要3秒,第二次查询需要0.28秒。哎哟。
缓存设置在一段时间内提高了性能。我们正在使用连接了EBS SSD的AWS Linux VM。环境似乎也有问题。在My Mac中的查询速度是AWS Linux/EBS环境的6.3倍。

相关问题