我有基于InnoDB的表,我可以用校验和:
checksum table _table_name_
如果表中有数百万条记录,那就太慢了。我想知道是否有任何方法可以识别表是否被改变了?
我需要一些快速且便宜的请求,并且每次对表的任何记录进行更改时都会更改。我没有为InnoDB表找到任何东西。有东西吗?
此致 菲利克斯
答案 0 :(得分:1)
如果你在桌面上有一个时间戳(比如说LastUpdateTS
),用默认设置创建,并且有一个索引,那么这应该相当快。它只会捕获插入和更新但不会删除删除:
SELECT MAX(LastUpdateTS)
FROM TableX
来自 MySQL Docs, Timestamp Properties
:
在
CREATE TABLE
语句中,可以通过以下任何方式声明第一个TIMESTAMP
列:使用
DEFAULT CURRENT_TIMESTAMP
和ON UPDATE CURRENT_TIMESTAMP
子句,该列具有其默认值的当前时间戳,并自动更新。
如果要捕获表中的任何更改(包括Deletes),触发器可能是最佳解决方案。每次INSERT
,UPDATE
或DELETE
语句作用于表时,触发器都可以更新辅助表。
答案 1 :(得分:0)
MySQL的更高版本为表的每次更新存储时间戳:
SELECT UPDATE_TIME
FROM information_schema.tables
WHERE TABLE_SCHEMA = 'dbname'
AND TABLE_NAME = 'tabname'