oracle 54,sql – Oracle直接加载插入54,061,487条记录

我有一个54,061,487记录的直接加载插入.我正在寻找速度.我根本不需要回滚.

涉及的所有表都设置为NOLOGGING.

这是一种方法

EXECUTE IMMEDIATE 'TRUNCATE TABLE meRegionsNow';

...

INSERT /*+ APPEND */ INTO meRegionsNow(

carrierId ,

region ,

zip ,

side ,

subPlanTypeId ,

monthIn )

SELECT

r.carrierId as carrierId ,

r.region as region ,

r.zip as zip ,

r.side as side ,

r.subPlanTypeId as subPlanTypeId ,

t.monthIn as monthIn

FROM

meTimeline t

INNER JOIN region r

ON t.monthIn >= r.effective AND

t.monthIn <= r.expiry;

此操作的执行计划符合预期(使用右侧

索引加快连接速度):

Statement Id=5336 Type=

Cost=2.64022111505165E-308 TimeStamp=25-10-11::15::35:08

(1) SELECT STATEMENT ALL_ROWS

Est. Rows: 5,667 Cost: 483

(5) TABLE TABLE ACCESS BY INDEX ROWID SCHEMA.REGION [Analyzed]

(5) Blocks: 2,826 Est. Rows: 944 of 377,779 Cost: 80

Tablespace: USERS

(4) NESTED LOOPS

Est. Rows: 5,667 Cost: 483

(2) INDEX INDEX FULL SCAN SCHEMA.METL$MONTHIN [Analyzed]

Est. Rows: 6 Cost: 1

(3) INDEX INDEX RANGE SCAN SCHEMA.RGN$MULTI3 [Analyzed]

Est. Rows: 944 Cost: 72

这是另一种方法:

EXECUTE IMMEDIATE 'TRUNCATE TABLE meRegionsNow';

...

DECLARE

CURSOR meTimeline_cur IS

SELECT monthIn

FROM meTimeline

ORDER BY monthIn;

BEGIN

FOR meTimeline_rec IN meTimeline_cur LOOP

/* Cross regions with timeline */

INSERT /*+ APPEND */ INTO meRegionsNow(

carrierId ,

region ,

zip ,

side ,

subPlanTypeId ,

monthIn )

SELECT

r.carrierId as carrierId ,

r.region as region ,

r.zip as zip ,

r.side as side ,

r.subPlanTypeId as subPlanTypeId ,

meTimeline_rec.monthIn as monthIn

FROM region r

WHERE

meTimeline_rec.monthIn >= r.effective AND

meTimeline_rec.monthIn <= r.expiry;

COMMIT;

END LOOP;

END;

什么是最快的方式?我认为光标控制的直接加载插入和直接SQL直接加载插入之间没有太大区别.

同样,我不关心日志记录,回滚,保留任何撤消数据.我怀疑这个问题花费很长时间的原因是表空间数据文件使用太小的默认扩展区太频繁地自动扩展.

我认为只要调整meRegionsNow表空间的大小,这个问题就会得到解决

数据文件.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值