我在加载数据时遇到问题。我必须将 800,000 行从一个表复制到 Oracle 数据库中的另一个表。

我先尝试了 10,000 行,但花费的时间并不令人满意。我尝试使用“BULK COLLECT”和“INSERT INTO SELECT”子句,但对于这两种情况,响应时间都在 35 分钟左右。这不是我想要的响应。

有人有什么建议吗?

请您参考如下方法:

阿尼类,

使用“INSERT INTO SELECT”是填充表格的最快方法。您可能希望使用以下一两个提示来扩展它:

  • APPEND:使用直接路径加载,绕过缓冲区缓存
  • PARALLEL:如果您的系统有多个 cpu,则使用并行处理,这是一次性操作或在一个“自私”进程消耗更多资源无关紧要的时候发生的操作。<

只需在我的笔记本电脑上使用追加提示即可在 5 秒内复制 800,000 个非常小的行:

SQL> create table one_table (id,name) 
  2  as 
  3   select level, 'name' || to_char(level) 
  4     from dual 
  5  connect by level <= 800000 
  6  / 
 
Tabel is aangemaakt. 
 
SQL> create table another_table as select * from one_table where 1=0 
  2  / 
 
Tabel is aangemaakt. 
 
SQL> select count(*) from another_table 
  2  / 
 
  COUNT(*) 
---------- 
         0 
 
1 rij is geselecteerd. 
 
SQL> set timing on 
SQL> insert /*+ append */ into another_table select * from one_table 
  2  / 
 
800000 rijen zijn aangemaakt. 
 
Verstreken: 00:00:04.76 

您提到在您的案例中此操作需要 35 分钟。您能否发布更多详细信息,以便我们了解究竟花费了 35 分钟的时间?

问候, 罗布。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!