1

我想检查我的 MySQL 表是否已更改,我认为对其进行校验和可能是一个很好的解决方案。我正在使用官方的 MySQL .NET 连接器。

通常我使用MySqlDataReader来从我的选择查询中获取数据,但是我不确定它如何在校验和查询中工作。这就是我到目前为止所拥有的。

string query = "checksum table `" + name + "`";

string result = "";

if (isConnected())
{
   MySqlCommand cmd = new MySqlCommand(query, connection);
   cmd.ExecuteNonQuery();
}

我在这里找到了校验和查询。

任何帮助表示赞赏!

4

1 回答 1

3

您有正确的查询,但是您应该了解可能的性能影响。

如果表是 MyISAM(如果您使用的是更新版本的 MySQL,则可能不应该是)并且您为表定义了 CHECKSUM=1 选项,那么您可以执行 QUICK 校验和,这应该会很快发生。

如果你有一个 INNODB 表,你将不得不执行一个全表扫描来执行这个命令。从性能的角度来看,这可能在相当大的积极使用的表上是不可行的。

我建议在这里查看 MySQL 文档以获取您的选项。

http://dev.mysql.com/doc/refman/5.5/en/checksum-table.html

另一个可能简单的选项是在表上放置一个触发器,每次插入/更新/删除记录时,它都会更新另一个表中的时间戳。然后,您可以将此时间戳与给定日期进行比较,以了解在该时间段内是否进行了更改。

同样,如果您的表还没有“On UPDATE CURRENT_TIMESTAMP”时间戳字段,您可以简单地添加一个,在其上放置一个索引并查询该字段的最大值。这显然会给表增加一些数据大小和索引大小的开销,这可能是不可取的。这显然也不会捕获删除(尽管您可以通过计算主索引字段来轻松检查)

于 2013-04-12T21:46:28.690 回答