【发布时间】:2011-02-16 15:28:16
【问题描述】:
我过去曾成功地将数据库查询的(大量)处理结果存储在 memcached 中,使用基础表的最后更新时间作为缓存键的一部分。对于 MyISAM 表,上次更改时间在 SHOW TABLE STATUS 中可用。不幸的是,对于 InnoDB 表,这通常为 NULL。
在 MySQL 4.1 中,InnoDB 在其SHOW TABLE STATUS 行中的 ctime 通常是其实际的上次更新时间,但对于 MySQL 5.1 似乎并非如此。
表中有一个 DATETIME 字段,但它只显示一行被修改的时间 - 它不能显示不再存在的行的删除时间!所以,我真的不能用MAX(update_time)。
这是真正棘手的部分。我有许多我确实从中读取的副本。我可以找出不依赖于实际应用更改的表的状态吗?
我在研究了一段时间后得出的结论是,不可能像我希望的那样便宜地获得这些信息。我可能会缓存数据,直到我期望表更改的时间(它每天更新一次),并让查询缓存在可能的地方提供帮助。
【问题讨论】: