【问题标题】:Archive mysql 6 months old data to other table将mysql 6个月大的数据归档到其他表
【发布时间】:2015-06-29 12:59:14
【问题描述】:

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

现在我想将 6 个月前的数据归档到单独的表中,例如 order_archive

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

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

【问题讨论】:

  • 我已经删除了我的 cmets。
  • 您可以在 SELECT 语句中同时使用 UNION 从两个表到 SELECT

标签: php mysql sql database percona


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以为此目的使用触发器,在使用触发器之前创建一个备份表然后使用它。对于前我正在创建插入表。如上所述,视图无法更新。您也可以为更新设置触发器,并且您的 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 ;
    

    【讨论】:

      【解决方案3】:

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

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

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

      当然,如果您需要更新存档记录,您会遇到问题,因为您无法更新此视图。但是,如果您需要更新数据或以任何方式对其进行修改,那么一开始就不应该将其“存档”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-12
        • 1970-01-01
        • 1970-01-01
        • 2012-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多