SQLite是否缓存查询结果以优化性能?

2 投票
2 回答
8344 浏览
提问于 2025-04-17 17:03

我发现了一个在sqlite中出现的情况。当我重复使用游标对象时,任务管理器里的内存使用量不断增加,直到我的程序出现内存溢出错误。

于是我重新整理了代码,每次查询时都打开一个到sqlite文件的连接,查询我需要的数据,然后再关闭这个连接。

这样做似乎对内存的需求没有那么大,内存使用量不会超过某个点。

我在sqlite数据库中做的操作很简单,就是对一个表进行选择(包含两个聚合操作)。

这种情况我们能控制吗?我想重复使用我的游标对象,但又不想让内存被耗尽……

2 个回答

0

是的,Python的sqlite3模块使用了一个语句缓存。

你可以在这里了解一下cached_statements这个参数。

关于这个问题的更多信息可以在这里找到。

2

查看 SQLite: PRAGMA cache_size

默认情况下,缓存的大小相当大(大约2MB),而且这个大小是针对每个连接的。你可以通过以下SQL语句把它设置得更小:

PRAGMA cache_size=-KB

如果你想设置缓存大小为千字节(KB),可以使用负号'-',否则它会设置为使用的页面数量。

另外,如果你使用多个连接,可能想要使用共享缓存来节省内存:SQLITE: 共享缓存

撰写回答