批量删除sql求问

子非鱼uu 2019-08-21 11:09:38
目前有以下问题:
因表中无效数据量过大,需定时清理数据,一次性删除所需时间太长,想用批量删除的方式一次删除1w条记录,如果使用in拼接id集合的方式删除可能会造成超过sql大小限制的错误。
请问如何在不使用in 或者 使用in但参数不循环集合的方式删除外还有什么比较好的sql实现吗?
...全文
85 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
RINK_1 2019-08-21
  • 打赏
  • 举报
回复
引用 3 楼 畵 的回复:
[quote=引用 1 楼 RINK_1 的回复:]

DELETE TABLE WHERE ID IN (SELECT TOP 10000 ID FROM TABLE ORDER BY ID)
大哥我发错版块了,db是mysql不支持top关键字[/quote] 那就用LIMIT,我这里没MYSQL环境,就不写了。还有就是像其他几位说的,如果加WHERE条件,同时对条件字段加索引,应该能快。
datafansbj 2019-08-21
  • 打赏
  • 举报
回复
百万级的表不算大,删除数据的 where 条件中的字段,最好加索引,这样会快很多。
听雨停了 2019-08-21
  • 打赏
  • 举报
回复
引用 4 楼 畵 的回复:
[quote=引用 2 楼 听雨停了 的回复:] 到底无效数据的多还是有效的多,无效的多,可以提出有效的数据到别的表,然后直接truncate table整个表
有效的多,百万级的,无效数据每天8、9十万的样子[/quote] 你的无效数据总有个规律吧,怎么去判断这些数据是无效的,就怎么写删除条件不就行了?
子非鱼uu 2019-08-21
  • 打赏
  • 举报
回复
引用 2 楼 听雨停了 的回复:
到底无效数据的多还是有效的多,无效的多,可以提出有效的数据到别的表,然后直接truncate table整个表
有效的多,百万级的,无效数据每天8、9十万的样子
子非鱼uu 2019-08-21
  • 打赏
  • 举报
回复
引用 1 楼 RINK_1 的回复:

DELETE TABLE WHERE ID IN (SELECT TOP 10000 ID FROM TABLE ORDER BY ID)
大哥我发错版块了,db是mysql不支持top关键字
听雨停了 2019-08-21
  • 打赏
  • 举报
回复
到底无效数据的多还是有效的多,无效的多,可以提出有效的数据到别的表,然后直接truncate table整个表
RINK_1 2019-08-21
  • 打赏
  • 举报
回复

DELETE TABLE WHERE ID IN (SELECT TOP 10000 ID FROM TABLE ORDER BY ID)
子非鱼uu 2019-08-21
  • 打赏
  • 举报
回复
已解决,使用自关联
DELETE tableA FROM t_table_a tableA,(SELECT id FROM t_table_a WHERE is_valid = 0 LIMIT 10000) tableB
WHERE tableA.id = tableB.id
吉普赛的歌 2019-08-21
  • 打赏
  • 举报
回复
--1. 增加中间表 tmp(autoId, id), 将要删除的 id 插入到 tmp 表中. autoId 为自增长列
--2. 循环删除,每次删除 100 条数据,太多可能导致卡死
DELETE FROM t
FROM t INNER JOIN tmp ON t.id=tmp.id 
WHERE autoId<=100

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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