查看: 9285|回复: 36

【讨论】大表删除数据

[复制链接]
论坛徽章:
4
ITPUB十周年纪念徽章
日期:2011-11-01 16:26:29优秀写手
日期:2014-04-15 06:00:112015年新春福章
日期:2015-03-04 14:53:162015年新春福章
日期:2015-03-06 11:58:39
发表于 2014-6-18 11:25 | 显示全部楼层 |阅读模式
表大概存超过4亿条数据,大小是35GB. 是个中间环节表。目前准备清理。请教各位有什么好的方法吗?
个人考虑有两种方法。
方法一: delete from <表名> where 时间条件
方法二 :  创建temp表,插入需要保留的数据,原表,temp表重命名,然后删除原表。
或者是否还有别的方法?
论坛徽章:
0
发表于 2014-6-18 11:35 | 显示全部楼层
1、大表是分区表不?若分区表可采用truncate ...........
2、备份 delete  from ... where

使用道具 举报

回复
论坛徽章:
76
山治
日期:2019-03-27 22:55:03秀才
日期:2016-01-25 15:02:04双子座
日期:2016-01-19 20:35:54秀才
日期:2016-01-13 12:14:26秀才
日期:2015-12-25 15:31:10秀才
日期:2015-12-18 09:28:57秀才
日期:2015-12-14 14:56:09秀才
日期:2015-12-14 14:51:16秀才
日期:2015-11-30 09:13:06处女座
日期:2015-11-27 12:27:01
发表于 2014-6-18 12:11 | 显示全部楼层
当然用方法2,而且启用parallel dml。
方法一是自找麻烦

使用道具 举报

回复
求职 : 数据库管理员
认证徽章
论坛徽章:
32
生肖徽章2007版:狗
日期:2009-07-20 17:10:18茶鸡蛋
日期:2013-05-23 16:34:43茶鸡蛋
日期:2013-07-19 14:39:22ITPUB社区千里马徽章
日期:2013-08-22 09:58:03雪铁龙
日期:2013-08-23 13:04:11林肯
日期:2013-09-04 14:07:20兰博基尼
日期:2013-09-16 13:45:20马上有钱
日期:2014-05-14 14:07:392014年世界杯参赛球队: 波黑
日期:2014-07-03 13:24:39马上有对象
日期:2014-10-30 14:04:32
发表于 2014-6-18 13:19 | 显示全部楼层
建议采用方法二,将需要的数据复制到一张临时表中,重命名后。然后再删除原表的数据。

使用道具 举报

回复
求职 : 数据库管理员
招聘 : Java研发
认证徽章
论坛徽章:
6348
ITPUB9周年纪念徽章
日期:2014-05-02 10:36:402011新春纪念徽章
日期:2014-12-29 12:11:142010广州亚运会纪念徽章:卡巴迪
日期:2014-08-06 08:44:252012新春纪念徽章
日期:2014-12-29 12:11:142013年新春福章
日期:2014-12-29 12:11:14马上有车
日期:2014-12-29 12:11:14马上有房
日期:2014-12-29 12:11:14马上有钱
日期:2014-12-29 12:11:14马上有对象
日期:2014-12-29 12:11:14马上加薪
日期:2014-12-29 12:11:14
发表于 2014-6-18 13:21 | 显示全部楼层
方法一是一条不归路...

使用道具 举报

回复
认证徽章
论坛徽章:
0
发表于 2014-6-18 13:57 | 显示全部楼层
创建一个表空间,将表移到表空间中,删除表空间对应的数据文件

使用道具 举报

回复
论坛徽章:
2
2013年新春福章
日期:2013-02-25 14:51:24日产
日期:2013-10-16 11:39:40
发表于 2014-6-18 14:35 | 显示全部楼层
本帖最后由 645930266 于 2014-6-23 11:26 编辑

小测试一枚:
图一枚:
1111.jpg
两个相同数据的表做个对比测试
方法一:  delete from ....
SQL> set timing on
SQL> delete from test1 where object_id<=40000;

158640 rows deleted.

Elapsed: 00:00:06.47



方法二: 创建临时表,按索引字段找到需要删除的object_id,再根据临时表中的object_id从原表中删除
SQL> create table temptb as select object_id from test2 where object_id<=40000;

Table created.

Elapsed: 00:00:00.27
SQL> delete from test2 where object_id in (select object_id from temptb);

158640 rows deleted.

Elapsed: 00:00:05.38



方法三:创建临时表,把需要的数据保存到临时表,原表删除或rename,然后把临时表rename到正确表名
SQL> create table temptb1 as select * from test1 where object_id>40000;

Table created.

Elapsed: 00:00:00.72



SQL> rename test1 to tt;

Table renamed.

Elapsed: 00:00:00.28
SQL> rename temptb1 to test1;

Table renamed.

Elapsed: 00:00:00.19

三种方法优缺点:
1 , 耗时较长,但不额外占用空间
2,耗时一般,占用空间一般
3,耗时较短,占用空间大,应用需要断开(rename的时候)

个人推荐第二种方法


忘了,还有一种方法,看到有人提到了, 使用 在线重定义(online-redefinition:dbms_redefinition  在网上可以查查用法),把原表(非分区表)转换成 分区表,然后再按分区来truncate数据,这样效率貌似也蛮高的

使用道具 举报

回复
求职 : 数据库管理员
认证徽章
论坛徽章:
123
祖国65周年纪念徽章
日期:2014-09-29 10:39:00祖国65周年纪念徽章
日期:2014-09-29 21:00:17祖国65周年纪念徽章
日期:2014-10-01 10:45:34祖国65周年纪念徽章
日期:2014-10-01 12:33:03祖国65周年纪念徽章
日期:2014-10-01 12:33:07祖国65周年纪念徽章
日期:2014-10-03 14:27:11itpub13周年纪念徽章
日期:2014-10-01 12:57:11itpub13周年纪念徽章
日期:2014-09-28 17:39:51itpub13周年纪念徽章
日期:2014-09-28 18:00:21itpub13周年纪念徽章
日期:2014-09-29 18:04:10
发表于 2014-6-18 16:14 | 显示全部楼层
   一会死的很惨,长记性的尝试。

使用道具 举报

回复
论坛徽章:
5
宝马
日期:2014-01-07 09:08:00技术图书徽章
日期:2014-01-26 14:02:052014年新春福章
日期:2014-02-18 16:49:31马上有钱
日期:2014-02-18 16:49:31优秀写手
日期:2014-02-22 06:00:13
发表于 2014-6-18 16:26 | 显示全部楼层
wolfop 发表于 2014-6-18 12:11
当然用方法2,而且启用parallel dml。
方法一是自找麻烦

对头

使用道具 举报

回复
论坛徽章:
0
发表于 2014-6-18 19:14 | 显示全部楼层
645930266 发表于 2014-6-18 14:35
小测试一枚:
图一枚:

不错,顶了

使用道具 举报

回复

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

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年6月4日~6日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


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