暂无图片
oracle分区表数据导入效率
我来答
分享
Uncopyrightable
2022-01-07
oracle分区表数据导入效率

Oracle创建分区表,使用insert into * select方式导入数据很慢,除了insert into、数据泵导入数据还有什么方式能快速导入呀?
如果启用并行会加速导入速度嘛?或者nologging呐?

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
三笠丶
暂无图片

开并行和nologging会加快导入速度,建议使用。

ctas 创建分区表:

create table 分区表名 NOLOGGING PARALLEL 8 TABLESPACE 表空间名称 AS select /*+PARALLEL(t,8)*/ * from 原表名 t where 1=1;

insert方式:

alter session enable parallel dml; insert /*+ append parallel(表名,8) */ into 表名 select /*+ parallel(原表,8)*/* from 原表; alter session disable parallel dml;
暂无图片 评论
暂无图片 有用 0
暂无图片
薛晓刚

本身insert into select不会慢,这种每秒1万条数据是最差的。实际会很快。

如果慢问题可能在select上,他慢。

暂无图片 评论
暂无图片 有用 0
Uncopyrightable
题主
2022-01-07
这就尴尬了,弄成rowid或者开窗函数方式好了;
DarkAthena

还可以用sqlldr

暂无图片 评论
暂无图片 有用 1
Thomas

二楼专家,我测试了下,CTAS方式,nologging和开并行确实可提高速度,但是insert into方式的效果并不明显,请看例子:

QL> alter session enable parallel dml;

Session altered.

Elapsed: 00:00:00.00
SQL> insert /*+append parallel(tb_zxp,8)*/ into tb_zxp nologging select /*+parallel(tb_waybill,8)*/ * from tb_waybill where corp_id<>'0032';

248588 rows created.

Elapsed: 00:00:11.87
SQL> rollback;

Rollback complete.

Elapsed: 00:00:00.02
SQL> alter session disable parallel dml;

Session altered.

Elapsed: 00:00:00.01
SQL> insert into tb_zxp select * from tb_waybill where corp_id<>'0032';

248588 rows created.

Elapsed: 00:00:12.47

暂无图片 评论
暂无图片 有用 0
DarkAthena
2022-01-07
对的,CTAS的确比insert into更快,以前做报表要得急的时候我都是create table as
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏