oracle11g – 在Oracle中插入一百万行的最快方法
发布时间:2021-03-14 16:35:24 所属栏目:站长百科 来源:网络整理
导读:如何以最佳方式在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_debt
如何以最佳方式在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中. 有关Query使用内存的更多细节: 每个查询都有自己的PGA [程序全局区域],基本上每个查询都可以使用RAM.如果这个区域不足以返回查询结果,则SQL引擎开始使用Golabl临时表空间,就像硬盘一样,查询开始变慢.如果查询所需的数据太大,即使临时区域不够,那么您将会出现表空间错误. 所以总是设计查询,以便它保持在PGA,否则它是一个红旗. (编辑:淮安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
热点阅读