MYSQL数据归档

时间:2010-06-29 23:36:14

标签: mysql

我有一个带有timestamp列的表,用于记录修改记录的时间。 我想在每晚的基础上移动所有超过6天的记录。 我应该使用

insert into archive_table select * from regualr_table where  datediff( now(), audit_updated_date)>=6; 
delete from regular_table where  datediff( now(), audit_updated_date)>=6; 

因为regular_table中有100万行,无论如何都要优化查询以便它们运行得更快?删除也会锁定regular_table吗? 我主要担心的是这个归档过程不会减慢对db的读取查询。

1 个答案:

答案 0 :(得分:1)

两个建议:

计算变量中截止日期的值,并将查询与此进行比较,例如:

  

SET @archivalCutoff = DATE_SUB(NOW(),INTERVAL 6 DAY);

     

从regular_table插入archive_table select *,其中audit_updated_date< @archivalCutoff;

     

从regular_table中删除audit_updated_date)< @archivalCutoff;

事实上你在问题中遇到的问题,特别是有大量记录的问题,因为截止移动,你可能会在常规表和归档表中获得记录,并且你可能会得到已删除但未归档的记录。 / p>

第二个建议是索引audit_updated字段。