Oracle 利用rowid快速删除大表中部分数据

本文探讨了在数据仓库环境中,如何利用Oracle的ROWID特性快速删除大表中的部分数据。通过获取满足条件的ROWID,然后批量删除,以提高删除效率。在具有分区的MID_BASE_OUTPATIENT_TEST表上,此方法尤其适用。
摘要由CSDN通过智能技术生成

问题:

  我们在负责数据仓库的时候,都会有一个中间表(ODS层)来存放部分粒度很细的数据,虽然中间表不是归档表,但是由于每日的业务数据量庞大,每个中间表也会存放有几千万条数据,业务时间跨度达到一个月。而且业务数据提交的是不会停止的,因此,我们在对中间表进行数据更新的时候都会先删除再插入数据,那么问题来了:如何才能快速的删除大表的部分数据。

方案:

  利用Oracle自带的伪列ROWID进行匹配删除,先将满足条件的ROWID获取回来,然后利用ROWID批量删除代替单条语句删除部分数据。

环境:

  • MID_BASE_OUTPATIENT_TEST 是分区表,分区键为业务时间,每个月一个分区,每个分区根据事件号(最小粒度,主键)进行HASH分区,在该列上建立本地分区索引。
  • MID_BASE_OUTPATEINT_INFO是每天的变化数据。

实现脚本:

--根据rowid批量删除
declare
  cursor v_cur is
    select rowid
      from mid_base_outpatient_test mid
     where exists (select 1
              from mid_base_outpatient_info t
             where t.event = mid.event)
     order by rowid;   --获取目标表上要删除行的rowid

  type v_rowid_type is table of rowid index by pls_in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值