如何使用数百万条记录快速检查MySQL InnoDB表

时间:2012-01-10 12:43:36

标签: mysql innodb checksum delta

我有基于InnoDB的表,我可以用校验和:

checksum table _table_name_

如果表中有数百万条记录,那就太慢了。我想知道是否有任何方法可以识别表是否被改变了?

我需要一些快速且便宜的请求,并且每次对表的任何记录进行更改时都会更改。我没有为InnoDB表找到任何东西。有东西吗?

此致 菲利克斯

2 个答案:

答案 0 :(得分:1)

如果你在桌面上有一个时间戳(比如说LastUpdateTS),用默认设置创建,并且有一个索引,那么这应该相当快。它只会捕获插入和更新但不会删除删除:

SELECT MAX(LastUpdateTS)
FROM TableX

来自 MySQL Docs, Timestamp Properties

  

CREATE TABLE语句中,可以通过以下任何方式声明第一个TIMESTAMP列:

     

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


如果要捕获表中的任何更改(包括Deletes),触发器可能是最佳解决方案。每次INSERTUPDATEDELETE语句作用于表时,触发器都可以更新辅助表。

答案 1 :(得分:0)

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

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