我有一个带有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的读取查询。
答案 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字段。