2015-06-29 30 views
-1

我正在運行一個購物網站,並且在訂單表中有很多數據。存檔mysql 6個月的舊數據到其他表

現在我想存檔6個月的數據在一個單獨的表,如order_archive

但我的問題是,如果我這樣做,我不得不改變我所有使用訂單表的查詢,因爲此表order將不包含舊數據,我必須爲舊訂單編寫其他查詢。

請建議我解決此問題的可能方法是什麼。

+0

我已刪除我的評論。 – Huey

+1

你可以在你的SELECT語句中使用'UNION'來同時從兩個表中'SELECT'。 – Huey

回答

0

您可以創建一個視圖來引用數據。有如下簡單:

CREATE VIEW orders_all AS 
    SELECT * FROM orders UNION 
    SELECT * FROM orders_archive 

應用程序代碼可以在提取數據時引用該視圖而不是表。

當然,如果您需要更新歸檔記錄,您將遇到問題,因爲您無法更新此視圖。但是,如果您需要更新數據或以任何方式修改數據,那麼它實際上不應該首先「歸檔」。

0

你可以使用觸發器爲此目的,在使用觸發器之前創建一個備份表然後使用它。爲我以前創建插入表。如上所述,視圖無法更新。您也可以設置更新的觸發器,並且您的order_archive表包含更新的新數據。每天

create table order_archive as select * from order; 
insert into order values (1,2); 

mysql> delimiter // 
CREATE TRIGGER order_like BEFORE INSERT ON order 
    FOR EACH ROW 
    BEGIN 
    INSERT INTO order_archive values(NEW.a1, NEW.a2); 
    END;// 
mysql> delimiter ; 
1

而是歸檔數據和更改所有查詢以獲得來自我建議創建分區的結果,這將只保留一個表,供您參考,並在同一個表中給出雖然所有的數據更好的性能。