问题描述
嗨,兄弟,
请你帮忙。
我的问题是:-
我想用5000万记录从其他表复制一个表,现在什么是最好的方法和最快的方法来重新创建它。
1)PLSQL-具有限制的批量收集 (也需要2到3天的时间)。
2) 插入所有带有paralle提示的内容 (它在运行6到7个小时后会引发一些空间错误,就像某些数据库空间问题一样,但是在我重新解决之后,它也花费了相同的时间)。
3) 在目标表上创建索引是个好主意。
4) 我是否需要禁用sourec表上的所有索引和约束?
如果可能的话,请说出最好的方法,我正在努力解决所有问题。
请你帮忙。
我的问题是:-
我想用5000万记录从其他表复制一个表,现在什么是最好的方法和最快的方法来重新创建它。
1)PLSQL-具有限制的批量收集 (也需要2到3天的时间)。
2) 插入所有带有paralle提示的内容 (它在运行6到7个小时后会引发一些空间错误,就像某些数据库空间问题一样,但是在我重新解决之后,它也花费了相同的时间)。
3) 在目标表上创建索引是个好主意。
4) 我是否需要禁用sourec表上的所有索引和约束?
如果可能的话,请说出最好的方法,我正在努力解决所有问题。
专家解答
没有太多的细节可以继续,但最可能的原因是目标表上的索引/约束。
例如:
表上有5000万行,笔记本电脑上没有索引... 我可以在一分钟内做到这一点
同一张表上有100万行... 现在有4个索引 ....
这将推断出700秒 (12分钟) 的5000万行。
和平了,兄弟。
例如:
表上有5000万行,笔记本电脑上没有索引... 我可以在一分钟内做到这一点
SQL> create table src 2 as select * from dba_Objects; Table created. SQL> create table tgt 2 as select * from dba_Objects where 1=0; Table created. SQL> SQL> set timing on SQL> SQL> insert /*+ APPEND */ into tgt 2 select s.* from src s, 3 ( select 1 from dual connect by level <= 50000000/82000 ); 49931301 rows created. Elapsed: 00:01:03.82
同一张表上有100万行... 现在有4个索引 ....
SQL> set timing off SQL> truncate table tgt; Table truncated. SQL> SQL> create index tgt_ix1 on tgt (owner); Index created. SQL> create index tgt_ix2 on tgt (object_name); Index created. SQL> create index tgt_ix3 on tgt (object_id); Index created. SQL> create index tgt_ix4 on tgt (object_type); Index created. SQL> SQL> SQL> set timing on SQL> insert /*+ APPEND */ into tgt 2 select s.* from src s, 3 ( select 1 from dual connect by level <= 1000000/82000 ); 983868 rows created. Elapsed: 00:00:14.84
这将推断出700秒 (12分钟) 的5000万行。
和平了,兄弟。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




