我正在運行一個購物網站,並且在訂單表中有很多數據。存檔mysql 6個月的舊數據到其他表
現在我想存檔6個月的數據在一個單獨的表,如order_archive
。
但我的問題是,如果我這樣做,我不得不改變我所有使用訂單表的查詢,因爲此表order
將不包含舊數據,我必須爲舊訂單編寫其他查詢。
請建議我解決此問題的可能方法是什麼。
我正在運行一個購物網站,並且在訂單表中有很多數據。存檔mysql 6個月的舊數據到其他表
現在我想存檔6個月的數據在一個單獨的表,如order_archive
。
但我的問題是,如果我這樣做,我不得不改變我所有使用訂單表的查詢,因爲此表order
將不包含舊數據,我必須爲舊訂單編寫其他查詢。
請建議我解決此問題的可能方法是什麼。
您可以創建一個視圖來引用數據。有如下簡單:
CREATE VIEW orders_all AS
SELECT * FROM orders UNION
SELECT * FROM orders_archive
應用程序代碼可以在提取數據時引用該視圖而不是表。
當然,如果您需要更新歸檔記錄,您將遇到問題,因爲您無法更新此視圖。但是,如果您需要更新數據或以任何方式修改數據,那麼它實際上不應該首先「歸檔」。
你可以使用觸發器爲此目的,在使用觸發器之前創建一個備份表然後使用它。爲我以前創建插入表。如上所述,視圖無法更新。您也可以設置更新的觸發器,並且您的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 ;
而是歸檔數據和更改所有查詢以獲得來自我建議創建分區的結果,這將只保留一個表,供您參考,並在同一個表中給出雖然所有的數據更好的性能。
我已刪除我的評論。 – Huey
你可以在你的SELECT語句中使用'UNION'來同時從兩個表中'SELECT'。 – Huey