将mysql存档6个月的数据到其他表

时间:2015-06-29 12:59:15

标签: php mysql sql database percona

我正在运营一个购物网站,订单表中有很多数据。

现在,我想将6个月的数据归档到order_archive这样的单独表格中。

但我的问题是,如果我这样做,我必须更改我使用订单表的所有查询,因为此表order将不包含旧数据,我必须为旧订单编写其他查询。

请建议我解决这个问题的可能方法是什么。

3 个答案:

答案 0 :(得分:1)

而是每天归档数据并更改所有查询以获得两者的结果我建议创建分区,这将只保留一个表供您参考,并通过同一表中的所有数据提供更好的性能。

答案 1 :(得分:0)

您可以创建一个视图来引用数据。简单的事情:

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

然后,应用程序代码可以在获取数据时引用该视图而不是表。

当然,如果您需要更新存档记录,您将遇到问题,因为您无法更新此视图。但是,如果您需要更新数据或以任何方式对其进行修改,那么它确实不应该被归档"首先。

答案 2 :(得分: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 ;