在 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
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