高效删除大表重复记录的解决方案

Oracle DDL与数据迁移
本文详细介绍了一种在Oracle数据库中使用DDL语句创建索引、中间表,并进行数据迁移的方法。通过创建结构一致的中间永久表来节省资源,接着进行数据的筛选与合并,最后完成数据迁移至目标表的过程。
---ddl before
CREATE bitmap index BIT_IDX_DATA_SRC on t1(DATA_SRC) NOLOGGING;
create index IDX_ID_Number on t1(ID_NUMBER) NOLOGGING;
ANALYZE INDEX BIT_IDX_DATA_SRC COMPUTE STATISTICS;
ANALYZE INDEX IDX_ID_Number COMPUTE STATISTICS;



--创建结构一致的中间永久表(DDL无undo非常节省资源)IN ('CBRC', 'CBRC File')  ----非常关键的一步
CREATE TABLE t1_mid tablespace TBS_LS_DATA
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  )  AS  SELECT * 
    FROM t1 t1
   WHERE t1.record_id = (SELECT MAX(t2.record_id)
                            FROM t2 t2
                           WHERE t2.data_src IN ('CBRC', 'CBRC File')
                            AND t1.id_number = t2.id_number)                        
     AND t1.data_src IN ('CBRC', 'CBRC File');

--NOT IN ('CBRC', 'CBRC File')
INSERT INTO t1_mid SELECT * FROM blacklist a WHERE a.data_src NOT IN ('CBRC', 'CBRC File');
COMMIT;


-----ddl after
    
TRUNCATE TABLE t1;
DROP INDEX BIT_IDX_DATA_SRC;
DROP INDEX IDX_ID_Number;

--移动数据从中间表到最终表
INSERT INTO t1 SELECT * FROM blacklist_mid;

/*INSERT INTO t1 select * From (SELECT * FROM blacklist_mid  order by 1) where rownum<=1000000;*/
ANALYZE TABLE t1 COMPUTE STATISTICS; --收集统计信息

--清理环境
DROP TABLE t1_mid;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值