在 SQLite 中实现查询缓存

Implementing a query cache in SQLite

SQLite 有查询缓存的概念吗?例如,如果我连续两次执行相同的查询:

select * from Sales1m group by territory_id;
select * from Sales1m group by territory_id;

Result: 136 rows returned in 6663ms

Result: 136 rows returned in 6745ms

即使设置了 PRAGMA cache_size=-1000 (1MB),也需要几乎完全相同的时间。

第二个查询是否从第一个查询中受益?如果答案是否定的,那么在客户端实现查询缓存会有多困难?我想一个天真的实现可以使用查询字符串校验和和结果集(可能被压缩?),但它也需要在更新 table(s) 时失效。

AFAIK SQLite 没有内置的查询缓存。您必须在应用程序层添加一个,可能是通过使用提供查询缓存的 ORM

它所做的是在内存中缓存数据库页面以加快检索速度。您可以使用 cache_size pragma 调整此缓存的大小。默认情况下它是 2000 kibibytes (2 megs)。尝试更大的东西。例如,20,000 kb(20 兆字节)。

PRAGMA <your schema>.cache_size = -20000