2013-04-12 76 views
1

我想檢查一下我的MySQL表是否已經改變,我認爲對它做校驗可能是一個好的解決方案。我正在使用官方的MySQL .NET連接器。如何使用C#執行MySQL表的校驗和?

通常我使用MySqlDataReader從我的select查詢中獲取數據,但我不確定它在校驗和查詢中的工作方式。這是我迄今爲止所擁有的。

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

string result = ""; 

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

我發現校驗和查詢here

任何幫助表示讚賞!

回答

3

您有正確的查詢,但您應該瞭解可能的性能影響。

如果表是MyISAM(如果您使用的是更新版本的MySQL,它可能不應該是這樣),並且您爲該表定義了CHECKSUM = 1選項,那麼您可以執行QUICK校驗和發生得很快。

如果您有INNODB表,您將不得不執行全表掃描來執行此命令。從一個積極使用的合理大尺寸的表格上,從性能角度來看,這可能是不可行的。

我會建議在這裏查看你的選項的MySQL文檔。

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

另一種可能是簡單的選擇是把一個觸發器在桌子上,其更新的另一個表中的每一條記錄被插入時間的時間戳/更新/刪除。然後,您可以將此時間戳與給定日期進行比較,以確定在該時間段內是否進行了更改。同樣,如果您的表尚未擁有「On UPDATE CURRENT_TIMESTAMP」時間戳字段,則可以簡單地添加一個,在其上放置索引並從該字段查詢最大值。這顯然增加了一些數據大小和索引大小的開銷,可能並不合意。這顯然也不會捕獲刪除(雖然你可以通過在主索引字段上計數來輕鬆檢查此問題)

+0

我在某處讀取速度很快,但正如您已經解釋的那樣,並且文檔中明確指出這是錯誤的。 我喜歡你的第二個解決方案,我會給它一個去。感謝Mike的快速反應! –

+0

@MarkEastwood我爲我的答案增加了另一個解決方案,根據你如何使用你的桌子可能是你的選擇。 –

+0

謝謝!行可能會被刪除,所以我認爲第一個解決方案對我來說最合適。 –