我有一个160 GB的SQLite数据库。表hwmp
的id
列和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
1条答案
按热度按时间ao218c7q1#
相关设置为
pragma cache_size = 200000;
200000页,4096字节。在设置之后,对于第一次查询,大约需要3秒,第二次查询需要0.28秒。哎哟。缓存设置在一段时间内提高了性能。我们正在使用连接了EBS SSD的AWS Linux VM。环境似乎也有问题。在My Mac中的查询速度是AWS Linux/EBS环境的6.3倍。