高分请教:批量删除SQL语句

bingobird 2007-11-05 01:23:40
表的唯一索引为流水号(主键)及用户号
需求为每个用户保留最近五条记录,删除多余的记录以避免表过大。

现在想到的办法是遍历,即对用户分组取出数据多于5条的用户;然后遍历该结果集,一个个取流水记录,删除超过5个的部分。执行间隔为1天1次。
但该方法存在一些问题:效率低,有多次SQL操作;比较复杂。

不知有没更好的方法。
...全文
144 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bingobird 2007-11-07
  • 打赏
  • 举报
回复
谢谢yueliangdao0608的提议,不过用临时表也有些担忧:
1、几乎是重导了两次表,当表记录是千万级时会非常耗用资源。
2、在清空原表至导入完成的时间点中,原表的数据都是不完整的,也会引起很多问题。

这种应用应该是比较常见的,不知别人是怎么用的。
xingchen228 2007-11-06
  • 打赏
  • 举报
回复
对,这样做是比较方便的
懒得去死 2007-11-05
  • 打赏
  • 举报
回复
思路就是这样。具体的你自己修改一下。
懒得去死 2007-11-05
  • 打赏
  • 举报
回复
利用临时表就非常高效了:

例如:
假如你的表名为 A,流水号字段为id

create temporary table tmp select * from A order by id desc limit 5;
truncate table A;
insert into A select * from tmp;
toddzst 2007-11-05
  • 打赏
  • 举报
回复
帮D

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧