12
返回列表 发新帖
楼主: bisal

[讨论] 【请高手指教!】夜维删除多个表小部分(1/10的百万级)记录的案例

[复制链接]
论坛徽章:
7
茶鸡蛋
日期:2013-06-14 13:16:17优秀写手
日期:2013-12-18 09:29:112014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:022015年新春福章
日期:2015-03-04 14:51:122015年新春福章
日期:2015-03-06 11:57:31ITPUB社区OCM联盟徽章
日期:2016-07-13 18:10:08
11#
 楼主| 发表于 2013-10-12 11:26 | 只看该作者
Corer 发表于 2013-10-11 10:22
同意 stresspuppy 的做法,每个表增加一列(limit,取值范围1,2,3,4,5,6).limit的取值规则:时间取天数模,入 ...

谢谢了!

使用道具 举报

回复
论坛徽章:
0
12#
发表于 2013-10-13 22:05 | 只看该作者
本帖最后由 kunshan2010 于 2013-10-13 22:10 编辑

利用rowid来删除数据,删除的速度会很快哦.以下是快速删除数据核心代码。
另外:删除每张表都重写这样的plsql,并且独立的放在文件中,然后开启多个会话,分别执行plsql,这样达到并行执行目的。(因为你只有10几张表,可以这样做,如果很多表,可以自己写个调度程序来执行哦)

cursor cur_name
select  b.rowid browid
from 主表 a,子表1 b
where a.LOCATOR_ID=b.LOCATOR_ID
and a.EXPIRE_DATE < TO_DATE(TO_CHAR(SYSDATE,'YYYY-MM-DD'),'YYYY-MM-DD') - 3);




for  rec  in  cur_name loop
   delete from 子表
    where rowid=rec.browid;


    ----commit;


end loop;



使用道具 举报

回复
论坛徽章:
7
茶鸡蛋
日期:2013-06-14 13:16:17优秀写手
日期:2013-12-18 09:29:112014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:022015年新春福章
日期:2015-03-04 14:51:122015年新春福章
日期:2015-03-06 11:57:31ITPUB社区OCM联盟徽章
日期:2016-07-13 18:10:08
13#
 楼主| 发表于 2013-10-18 09:20 | 只看该作者
kunshan2010 发表于 2013-10-13 22:05
利用rowid来删除数据,删除的速度会很快哦.以下是快速删除数据核心代码。
另外:删除每张表都重写这样的pl ...

谢谢您!

使用道具 举报

回复

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

本版积分规则 发表回复

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