表的唯一索引为流水号(主键)及用户号
需求为每个用户保留最近五条记录,删除多余的记录以避免表过大。现在想到的办法是遍历,即对用户分组取出数据多于5条的用户;然后遍历该结果集,一个个取流水记录,删除超过5个的部分。执行间隔为1天1次。
但该方法存在一些问题:效率低,有多次SQL操作;比较复杂。不知有没更好的方法。
需求为每个用户保留最近五条记录,删除多余的记录以避免表过大。现在想到的办法是遍历,即对用户分组取出数据多于5条的用户;然后遍历该结果集,一个个取流水记录,删除超过5个的部分。执行间隔为1天1次。
但该方法存在一些问题:效率低,有多次SQL操作;比较复杂。不知有没更好的方法。
假如你的表名为 A,流水号字段为idcreate temporary table tmp select * from A order by id desc limit 5;
truncate table A;
insert into A select * from tmp;
1、几乎是重导了两次表,当表记录是千万级时会非常耗用资源。
2、在清空原表至导入完成的时间点中,原表的数据都是不完整的,也会引起很多问题。这种应用应该是比较常见的,不知别人是怎么用的。