在我的情況下,我想維護一個表用於存儲某種數據,並在一段時間後從第一個表中刪除並存儲到另一個表中。從數據庫表中刪除數據的最佳做法是什麼?
我想澄清什麼是這種情況下的最佳做法。 我在java基礎應用程序中使用MySql數據庫。
在我的情況下,我想維護一個表用於存儲某種數據,並在一段時間後從第一個表中刪除並存儲到另一個表中。從數據庫表中刪除數據的最佳做法是什麼?
我想澄清什麼是這種情況下的最佳做法。 我在java基礎應用程序中使用MySql數據庫。
一般來說,我遵循這個程序。 Incase我想刪除一行。我有一個名爲deleted
的tinyint
列。我將該列標記爲true
。
這表明該行已被標記爲已刪除,所以我沒有,拿起它。
後來(也許每天一次),我運行一個腳本,在單杆或者完全刪除該行或將其遷移到另一臺...等
這是因爲每次你刪除一個有用行(即使它是1行),mysql必須重新索引(它是索引)。這可能需要大量系統資源,具體取決於您的數據大小或索引數量。您可能不希望每次都產生這些開銷...
添加視圖以僅選擇應用程序用於顯示數據的活動記錄。這樣,您就不會在物理刪除或移動到歸檔表之前忘記並顯示已刪除的記錄。 – HLGEM
您沒有提供足夠的信息,但我認爲如果兩個表具有相同的數據結構,那麼您可以避免使用兩個表。只需在第一個表格中添加另一列,併爲這些特定的第二個表格記錄設置狀態/類型。
例如:
id | Name | BirthDate | type
------------------------------------
1 | ABC | 01-10-2001 | firsttable
2 | XYZ | 01-01-2000 | secondtable
你可以選擇的記錄是這樣的:
select * from tablename where type='firsttable'
OR
select * from tablename where type='secondtable'
如果你正在歸檔舊數據,應該有辦法在mysql中設置預定作業。我知道SQL Server中有這種功能,它是大多數數據庫需要的功能,所以我認爲它可以在mySQL中完成。將工作安排在低使用時間運行。讓它選擇超過一年的所有記錄(或任何想要保持活動的記錄時間量)並將它們移動到歸檔表中,然後刪除它們。根據您要移動的記錄數量,最好每週或每天進行一次。您不希望過期的記錄數量過大,會極大地影響性能或使作業耗時過長。關鍵在於確保您保留所有經常需要的記錄,並且不要忘記考慮報告(許多報告需要有一年或兩年的數據價值,不要檔案記錄這些報告應該需要)。然後,您還需要設置一種方法,讓用戶在極少數情況下可以訪問存檔記錄,以便他們查看這些記錄。
這一切都取決於場景。向我們提供一些關於索引可能受到多大影響的更多信息。 –
如果您正在歸檔數據,那麼您可能希望在歸檔後將其從數據庫中完全刪除,而不是「移動它到另一個表「 –
@Preet兩個表都有可能有數千行數據。實際上我想要的是,在某個業務流程從第一個表中刪除數據並添加到另一個表之後。我想澄清在刪除部分。什麼是最好的辦法做到這一點,我不得不擔心第一個表的主鍵(自動增量)。因爲它又一次充滿了新的數據集。 – Lan