gpt4 book ai didi

oracle - 在 Oracle 中插入一百万行的最快方法

转载 作者:行者123 更新时间:2023-12-04 17:50:07 25 4
gpt4 key购买 nike

对于以下过程,如何以最佳方式在 Oracle 中插入超过一百万行?如果我将 FOR 循环增加到一百万行,它就会挂起。

create or replace procedure inst_prc1 as
xssn number;
xcount number;
l_start Number;
l_end Number;
cursor c1 is select max(ssn)S1 from dtr_debtors1;

Begin
l_start := DBMS_UTILITY.GET_TIME;
FOR I IN 1..10000 LOOP
For C1_REC IN C1 Loop
insert into dtr_debtors1(SSN) values (C1_REC.S1+1);
End loop;
END LOOP;
commit;
l_end := DBMS_UTILITY.GET_TIME;
DBMS_OUTPUT.PUT_LINE('The Procedure Start Time is '||l_start);
DBMS_OUTPUT.PUT_LINE('The Procedure End Time is '||l_end);
End inst_prc1;

最佳答案

您的方法将导致内存问题。最快的方法是[在大卫的评论后编辑查询以处理空场景]:

insert into dtr_debtors1(SSN)
select a.S1+level
from dual,(select nvl(max(ssn),0) S1 from dtr_debtors1) a
connect by level <= 10000

选择插入是最快的方法,因为所有内容都保留在 RAM 中。
如果此查询滑入全局临时区域,则该查询可能会变慢,但这需要 DB 调整。我认为没有比这更快的了。

关于 Query 内存使用的更多细节:

每个查询都有自己的 PGA [程序全局区域],它基本上是每个查询可用的 RAM。如果这个区域不足以返回查询结果,那么 SQL 引擎开始使用 Golabl 临时表空间,就像硬盘一样,查询开始变慢。如果查询所需的数据如此之大,以至于临时区域都不够用,那么您将出现表空间错误。

所以总是设计查询,使其留在 PGA 中,否则它是一个红旗。

关于oracle - 在 Oracle 中插入一百万行的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18414529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com