查看: 56322|回复: 25

抛砖引玉, 8000w左右的总数据量,删除1500w 左右的记录

[复制链接]
招聘 : 数据库管理员
论坛徽章:
99
技术图书徽章
日期:2014-03-27 09:30:56秀才
日期:2018-04-08 14:48:31
发表于 2018-2-2 10:51 | 显示全部楼层 |阅读模式
本帖最后由 szxiaocong 于 2018-2-2 14:14 编辑

8000w左右的总数据量,删除1500w 左右的记录
大家有什么好的思路,想法,就delete 语句 ,表结构设计,
多多发言。
应该是个很不错的case



#A(guid uniqueidentifier)
---#A 1500w

table_all (guid uniqueidentifier, col1 varchar(36).....)
---table_all 8000w, guid pk, clustered index,


----solution 1
WHILE 1 = 1
BEGIN
  DELETE TOP(5000)
    FROM table_all
   WHERE guid in (SELECT guid FROM #A1 );               
  IF  @@rowcount < 5000 BREAK;
END
GO

#A(guid uniqueidentifier, rowid int identity pk)
---solution2
declare @i int
set   @i = 1      ---不断修改,循环
while @i < 100000 ---不断修改,循环
begin

        select * into #T from #A1 where rowid >= @i and rowid < @i + 10000

        delete a
        --select a.guid
        FROM table_all a inner join #T t on a.guId = t.guId

        drop table #T
        set @i  = @i + 10000

end
GO


招聘 : 数据库管理员
论坛徽章:
99
技术图书徽章
日期:2014-03-27 09:30:56秀才
日期:2018-04-08 14:48:31
 楼主| 发表于 2018-2-2 11:27 | 显示全部楼层
开拓一下思路,表字段类型,索引,临时表

1人打赏

使用道具 举报

回复
论坛徽章:
54
秀才
日期:2017-02-22 15:18:002015年新春福章
日期:2015-03-06 11:57:31懒羊羊
日期:2015-03-04 14:48:16马上有对象
日期:2014-10-24 17:37:552014年世界杯参赛球队: 比利时
日期:2014-08-05 11:35:382014年世界杯参赛球队: 阿根廷
日期:2014-07-15 10:49:33马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11路虎
日期:2014-01-02 12:55:56ITPUB社区12周年站庆徽章
日期:2013-10-08 15:00:34
发表于 2018-2-2 13:19 | 显示全部楼层
若有维护窗口,就直接删呗。。若ONLINE,条件不是PK or 唯一键,建议先查询出要删除的PK or 唯一键,再小批量批次删除

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
99
技术图书徽章
日期:2014-03-27 09:30:56秀才
日期:2018-04-08 14:48:31
 楼主| 发表于 2018-2-2 13:58 | 显示全部楼层
luckyrandom 发表于 2018-2-2 13:19
若有维护窗口,就直接删呗。。若ONLINE,条件不是PK or 唯一键,建议先查询出要删除的PK or 唯一键,再小批 ...

恩,是的,分批次是必须的了。
但是这里,对于字段类型,应该有个性能区别
比如 如果关联字段是int,uniqueidentifier ,char,varchar,应该存在不同的性能

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
99
技术图书徽章
日期:2014-03-27 09:30:56秀才
日期:2018-04-08 14:48:31
 楼主| 发表于 2018-2-2 14:31 | 显示全部楼层
就性能方面来说,建表时,最好有个自增量
,删除时,如果可以关联到int 的 ,肯定比 字符要好的多

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
99
技术图书徽章
日期:2014-03-27 09:30:56秀才
日期:2018-04-08 14:48:31
 楼主| 发表于 2018-2-2 15:25 | 显示全部楼层
还有,就是要进行循环批次删除时,
为什么加了一个 临时的小表,进行操作
这里,大家可以自己测试下  where rowid >= @i and rowid <= @i + 10000
和  where rowid >=1 and rowid <= 10000

很多细节的东西,大家可以自己测试下。

使用道具 举报

回复
论坛徽章:
9
慢羊羊
日期:2015-03-04 14:55:272015年新春福章
日期:2015-03-06 11:59:47技术图书徽章
日期:2017-02-09 17:05:19秀才
日期:2017-02-22 15:16:26秀才
日期:2017-02-22 15:18:00现任管理团队成员
日期:2017-06-03 02:10:11版主1段
日期:2017-06-05 09:06:08秀才
日期:2017-08-18 11:04:35秀才
日期:2017-09-18 17:02:49
发表于 2018-2-2 17:41 | 显示全部楼层
不错的分享,顶一个,通常情况下,建立作业一个作业,定期不停的执行,一次删除少量的数量这样做的比较多

使用道具 举报

回复
论坛徽章:
9
慢羊羊
日期:2015-03-04 14:55:272015年新春福章
日期:2015-03-06 11:59:47技术图书徽章
日期:2017-02-09 17:05:19秀才
日期:2017-02-22 15:16:26秀才
日期:2017-02-22 15:18:00现任管理团队成员
日期:2017-06-03 02:10:11版主1段
日期:2017-06-05 09:06:08秀才
日期:2017-08-18 11:04:35秀才
日期:2017-09-18 17:02:49
发表于 2018-2-2 17:42 | 显示全部楼层
给加精华了,大家可以多多的讨论

使用道具 举报

回复
论坛徽章:
54
秀才
日期:2017-02-22 15:18:002015年新春福章
日期:2015-03-06 11:57:31懒羊羊
日期:2015-03-04 14:48:16马上有对象
日期:2014-10-24 17:37:552014年世界杯参赛球队: 比利时
日期:2014-08-05 11:35:382014年世界杯参赛球队: 阿根廷
日期:2014-07-15 10:49:33马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11路虎
日期:2014-01-02 12:55:56ITPUB社区12周年站庆徽章
日期:2013-10-08 15:00:34
发表于 2018-2-3 15:20 | 显示全部楼层
每天删除9位数的记录数。。各种姿势都有。。

使用道具 举报

回复
论坛徽章:
71
ITPUB元老
日期:2009-11-30 15:55:11授权会员
日期:2009-11-30 11:36:17ITPUB季度 技术新星
日期:2010-08-31 10:47:25优秀写手
日期:2014-12-24 06:00:14ITPUB8周年纪念徽章
日期:2009-09-27 10:21:20祖国60周年纪念徽章
日期:2009-10-09 08:28:00奔驰
日期:2013-10-20 13:32:09数据库板块每日发贴之星
日期:2008-10-03 01:02:14数据库板块每日发贴之星
日期:2009-11-23 01:01:03数据库板块每日发贴之星
日期:2010-07-27 01:01:02
发表于 2018-2-6 16:40 | 显示全部楼层
要是设计成分区表,就可以删分区了。当前的表也可以改造成分区表。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表