我有一个执行大型 MySQL 语句的 Python 程序。即使在 Python 程序终止后,我如何告诉 MySQL 保留缓存,以便下次运行 Python 程序时结果将被缓存?
现在,每次我运行 Python 脚本时,即使我运行的是完全相同的查询,也需要永远检索结果。我已经将我的query_cache_size
andquery_cache_limit
设置为大于结果集。
我有一个执行大型 MySQL 语句的 Python 程序。即使在 Python 程序终止后,我如何告诉 MySQL 保留缓存,以便下次运行 Python 程序时结果将被缓存?
现在,每次我运行 Python 脚本时,即使我运行的是完全相同的查询,也需要永远检索结果。我已经将我的query_cache_size
andquery_cache_limit
设置为大于结果集。
不幸的是,没有选项可以指示 MySQL 引擎将某些特定的查询结果保存在缓存中。你需要自己实现一个。
您可以将查询结果保存在“缓存”表中(但不能保存在TEMPORARY
表中,因为此类表只能从创建线程访问,并且在连接关闭时会被删除)。
然后,您将TRIGGERS
在基础表上进行设置,当任何此类表被更新时,这将清除缓存。或者,您可以简单地将 a 添加TIMESTAMP
到缓存数据中,并在任意时间跨度后认为它已过时。如果您能负担得起从缓存中获取稍微过时的数据,则后一种选择更便宜。
但是,解决方案可能是您需要优化查询或结构,以加快查询速度。
[编辑]
实际上,有一种(扭曲的)方法可以做到这一点。您可以将query_cache_type
server 选项设置为 2,以便仅SQL_CACHE
缓存使用关键字的查询。这允许对缓存哪些查询进行非常精细的控制。使用使您的query_cache_size
大小足以容纳每个查询的每个结果SQL_CACHE
,并且您确定不会覆盖任何结果。但是你必须自己管理所有缓存......