2012-01-10 74 views
1

我有,我可以校验和InnoDB的基础表:如何快速校验和MySQL的InnoDB表与数百万条记录

checksum table _table_name_ 

也就是说万一百万的记录慢驻留在表中。我想知道是否有任何方法可以识别桌子是否被改变?

我需要快速而便宜的东西来请求,并且每次改变表格的任何记录时都会发生变化。我没有找到任何InnoDB表格。有什么吗?

问候 菲利克斯

回答

0

MySQL的存储更高版本的每次更新表中的时间戳:

SELECT UPDATE_TIME 
FROM information_schema.tables 
WHERE TABLE_SCHEMA = 'dbname' 
    AND TABLE_NAME = 'tabname' 
+1

这似乎也很慢,并且我没有期望NULL的很多表返回NULL。 – GeorgieF 2012-01-10 13:20:34

1

如果餐桌上的时间戳(比如LastUpdateTS),使用默认设置创建,和它的索引,那么这应该是相当快的。它将只捕获插入和更新,但不删除,但:

SELECT MAX(LastUpdateTS) 
FROM TableX 

MySQL Docs, Timestamp Properties

CREATE TABLE声明,第一TIMESTAMP列可以在以下任何一种方式声明:

对于DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP子句,该列具有其默认值的当前时间戳,并自动更新。


如果你想赶上表中的任何改变(包括删除),触发可能是最好的解决方案。每当INSERT,UPDATEDELETE语句在表上作用时,触发器都可以更新辅助表。

+0

Thx的建议。如果数据库的负载很重,我不知道3个附加触发器会产生多少影响。因此,我决定添加一个时间戳列,并包含一个表的行数以实现删除操作。这意味着一些移民,但似乎是最好的交易。 – GeorgieF 2012-01-10 16:08:56