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 に答える