select 在 160GB sqlite3 数据库中操作需要很长时间
select operation takes a long time in a 160GB sqlite3 database
我有一个 160GB 的大型 SQLite 数据库。在tablehwmp
的id
列和stage
列上有一个索引。
CREATE INDEX idx_hwmp_id ON hwmp (id, stage);
当我计算行数时,查询 return 很快。仅需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
但是,如果我全部执行 select,实际时间非常高 - 85 秒。用户和系统时间加起来只有 2.5 秒。那么,为什么实时要高呢?
select * from hwmp where id = 2000 and stage = 4;
Run Time: real 85.420 user 0.801639 sys 1.754250
从 SQLite 中检索数据时似乎出现了一些问题。关于如何修复它的任何提示?
更多上下文:
我在几天前使用的 sqlite3 数据库 (300MB) 上尝试了另一个查询。它曾经在 20 毫秒内 return 数据。今天,它花了 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
相关设置为pragma cache_size = 200000;
200000页4096字节。设置后,第一次查询大约需要3s,第二次查询需要0.28s。呸
缓存设置提高了一段时间的性能。我们正在使用连接了 EBS SSD 的 AWS linux VM。环境好像也有问题。我的 Mac 中的查询时间比 AWS linux / EBS 环境快 6.3 倍。
我有一个 160GB 的大型 SQLite 数据库。在tablehwmp
的id
列和stage
列上有一个索引。
CREATE INDEX idx_hwmp_id ON hwmp (id, stage);
当我计算行数时,查询 return 很快。仅需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
但是,如果我全部执行 select,实际时间非常高 - 85 秒。用户和系统时间加起来只有 2.5 秒。那么,为什么实时要高呢?
select * from hwmp where id = 2000 and stage = 4;
Run Time: real 85.420 user 0.801639 sys 1.754250
从 SQLite 中检索数据时似乎出现了一些问题。关于如何修复它的任何提示?
更多上下文: 我在几天前使用的 sqlite3 数据库 (300MB) 上尝试了另一个查询。它曾经在 20 毫秒内 return 数据。今天,它花了 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
相关设置为pragma cache_size = 200000;
200000页4096字节。设置后,第一次查询大约需要3s,第二次查询需要0.28s。呸
缓存设置提高了一段时间的性能。我们正在使用连接了 EBS SSD 的 AWS linux VM。环境好像也有问题。我的 Mac 中的查询时间比 AWS linux / EBS 环境快 6.3 倍。