目前,我在mysql中有一個記錄事務的表。這些交易可能會由用戶更新 - 有時候不會,有時甚至經常更新。但是,我需要跟蹤對此表中每個字段的更改。所以,我現在所擁有的是一個名爲'is_deleted'的表中的TINYINT(1)字段,當用戶更新事務時,它將舊記錄的is_deleted字段更新爲1,並插入一個全新的紀錄。MySql表結構
這一切運作良好,因爲我只需要運行下面的SQL語句來獲得當前所有記錄:
SELECT id, foo, bar, something FROM trans WHERE is_deleted = 0;
但是,我擔心的是此表將增長不必要的大隨着時間的推移,我因此考慮實際刪除舊記錄並將其歸檔到另一個表(trans_deleted)。這意味着轉換表只包含「實時」記錄,因此可以使SELECT查詢速度更快一些。
但是,這意味着更新記錄會稍微長一些,因爲它將運行3個查詢: 1.插入到trans_deleted舊記錄; 2.從trans中刪除WHERE id = 5; 3.插入反式新記錄
因此,更新記錄需要多一點工作,但讀取會更快。
對此有何看法?
這裏有一個廣泛的討論這裏... http://stackoverflow.com/questions/3091293/making-a-row-inactive-in-mysql – 2010-08-06 12:29:01