2012-01-10 76 views
1

我有,我可以校驗和InnoDB的基礎表:如何快速校驗和MySQL的InnoDB表與數百萬條記錄

checksum table _table_name_ 

也就是說萬一百萬的記錄慢駐留在表中。我想知道是否有任何方法可以識別桌子是否被改變?

我需要快速而便宜的東西來請求,並且每次改變表格的任何記錄時都會發生變化。我沒有找到任何InnoDB表格。有什麼嗎?

問候 菲利克斯

回答

0

MySQL的存儲更高版本的每次更新表中的時間戳:

SELECT UPDATE_TIME 
FROM information_schema.tables 
WHERE TABLE_SCHEMA = 'dbname' 
    AND TABLE_NAME = 'tabname' 
+1

這似乎也很慢,並且我沒有期望NULL的很多表返回NULL。 – GeorgieF 2012-01-10 13:20:34

1

如果餐桌上的時間戳(比如LastUpdateTS),使用默認設置創建,和它的索引,那麼這應該是相當快的。它將只捕獲插入和更新,但不刪除,但:

SELECT MAX(LastUpdateTS) 
FROM TableX 

MySQL Docs, Timestamp Properties

CREATE TABLE聲明,第一TIMESTAMP列可以在以下任何一種方式聲明:

對於DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP子句,該列具有其默認值的當前時間戳,並自動更新。


如果你想趕上表中的任何改變(包括刪除),觸發可能是最好的解決方案。每當INSERT,UPDATEDELETE語句在表上作用時,觸發器都可以更新輔助表。

+0

Thx的建議。如果數據庫的負載很重,我不知道3個附加觸發器會產生多少影響。因此,我決定添加一個時間戳列,幷包含一個表的行數以實現刪除操作。這意味着一些移民,但似乎是最好的交易。 – GeorgieF 2012-01-10 16:08:56