我的项目要求在进行一些验证后在表格中插入1500万条记录,这应该在20分钟内完成。
源表是一个从其他应用程序接收数据的临时表。现在,从此临时表开始,我们必须在验证后将数据插入其中一个基表。当这个过程结束时,我们必须将登台表中的记录插入两个单独的历史表中。
首次插入的时间应为20分钟。 对于接下来的两个插入组合时间应该是20分钟。
同一个数据库中的所有四个表,在同一模式中。 我在案例1中使用Pro * C进行验证,但在第二次插入时有一个plsql包。
任何人都可以帮我提出任何建议,数据库是oracle 9i。另外,20分钟内可以处理的最大记录数是多少?
答案 0 :(得分:2)
这取决于您需要使用的数据类型。我不知道9i需要花多少时间,我使用11g(廉价笔记本电脑上的免费版),下面的插页(15,000,000个非常简单的行,一个数字列)花费不到20 秒强>:
SQL> create table a ( col number );
Table created.
Elapsed: 00:00:00.02
SQL> insert into a
2 select u.x + v.y
3 from (select level x from dual connect by level <= 15000) u
4 cross join (select level y from dual connect by level <= 1000) v;
15000000 rows created.
Elapsed: 00:00:19.46
SQL> commit;
Commit complete.
SQL> select count(*) from a;
COUNT(*)
----------
15000000
1 row selected.
Elapsed: 00:00:01.36
答案 1 :(得分:1)
最后,我们决定使用多线程并行插入两个历史表,这是一个简单的INSERT查询。 对于第二种情况,Pro * C正在逐个处理每个记录,因此,它无法在给定时间内完成。我们仍然实现了最大线程,这些线程无法阻止其他进程以及我们的Pl / SQL部分中的某种程度的并行。
谢谢大家的建议。