【问题标题】:How do I perform a checksum of a MySQL table using C#?如何使用 C# 执行 MySQL 表的校验和?
【发布时间】:2013-04-05 13:36:01
【问题描述】:

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

通常我使用MySqlDataReader 从我的选择查询中获取数据,但是我不确定它在校验和查询上的工作方式。这是我目前所拥有的。

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

string result = "";

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

我找到了校验和查询here。

感谢任何帮助!

【问题讨论】:

    标签: c# mysql .net checksum


    【解决方案1】:

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

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

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

    我建议您在此处查看 MySQL 文档以了解您的选择。

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

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

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

    【讨论】:

    • 我在某处读到它很快,但正如您所解释的那样,文档清楚地表明这是错误的。我喜欢你的第二个解决方案,我会试一试。感谢迈克的快速回复!
    • @MarkEastwood 我还为我的答案添加了另一个解决方案,这取决于您使用桌子的方式可能是您的选择。
    • 谢谢!行可能会被删除,所以我认为第一个解决方案最适合我。
    猜你喜欢
    • 2016-05-13
    • 2010-12-31
    • 2015-08-25
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    相关资源
    最近更新 更多