跨会话保留MySQL缓存

时间:2012-06-16 16:55:25

标签: mysql

我有一个执行大型MySQL语句的Python程序。即使在Python程序终止后,我如何告诉MySQL保留缓存,以便下次运行Python程序时,结果将被缓存?

现在,每次运行Python脚本时,即使我运行完全相同的查询,也需要永远检索结果。我已将query_cache_sizequery_cache_limit设置为大于结果集。

1 个答案:

答案 0 :(得分:0)

遗憾的是,没有选项可以指示MySQL引擎将某些特定的查询结果保留在缓存中。你需要自己实现一个。

您可以将查询结果保存在“缓存”表中(但不能保存在TEMPORARY表中,因为这些表只能从创建线程访问,并在连接关闭时被删除。)

然后,您将在基础表上设置TRIGGERS,这将在更新任何此类表时清除缓存。或者,您可以简单地向缓存数据添加TIMESTAMP,并在任意时间段后将其视为过时。如果您可以从缓存中获得稍微过时的数据,则后一种选择会更便宜。

但是,解决方案可能是您需要优化查询或结构,以加快查询速度。

[编辑]

实际上,有一种(扭曲的)方式可以做到这一点。您可以将query_cache_type服务器选项设置为2,以便仅缓存使用SQL_CACHE关键字的查询。这允许非常精细地控制缓存哪些查询。使query_cache_size大到足以使用SQL_CACHE保存每个查询的每个结果,并且您确定不会覆盖任何查询。但是你必须自己管理所有的缓存......