我在加载数据时遇到问题。我必须将 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 分钟的时间?
问候, 罗布。