表的唯一索引为流水号(主键)及用户号
需求为每个用户保留最近五条记录,删除多余的记录以避免表过大。现在想到的办法是遍历,即对用户分组取出数据多于5条的用户;然后遍历该结果集,一个个取流水记录,删除超过5个的部分。执行间隔为1天1次。
但该方法存在一些问题:效率低,有多次SQL操作;比较复杂。不知有没更好的方法。

解决方案 »

  1.   

    利用临时表就非常高效了:例如:
    假如你的表名为 A,流水号字段为idcreate temporary table tmp select * from A order by id desc limit 5;
    truncate table A;
    insert into A select * from tmp;
      

  2.   

    谢谢yueliangdao0608的提议,不过用临时表也有些担忧:
    1、几乎是重导了两次表,当表记录是千万级时会非常耗用资源。
    2、在清空原表至导入完成的时间点中,原表的数据都是不完整的,也会引起很多问题。这种应用应该是比较常见的,不知别人是怎么用的。