如何提高批量insert效率
近日碰到一个批量insert 的问题,我有一个表
create table t1 (id int not null,
a varchar2(10) null,
b varchar2(10) null,
c varchar2(10) null,
d varchar2(10) null
) nologging;
我有一批类似下面的insert 语句
insert into t1(id,a) values(1,'a');
insert into t1(id,b) values(1,'b');
insert into t1(id,c) values(1,'c');
insert into t1(id,d) values(1,'d');
请问如何提高效率。
------解决方案--------------------批量commit
------解决方案--------------------数据量比较大的为什么不用sql loader导入
------解决方案--------------------刚不久看到一个关于sql解析执行的内容。你可以试试
alter system set cursor_sharing = force
insert into t1(id,a) values(1,'a');
insert into t1(id,a) values(2,'a');
insert into t1(id,a) values(3,'a');
这些都只是一次解析,可能会快些。。
------解决方案--------------------使用append参数才,减少redo生成量
INSERT /*+ APPEND NOLOGGING*/
INTO t1(id,a)
SELECT 1,'a' FROM DUAL
UNION ALL
SELECT 1,'b' FROM DUAL
..
..
可以按2楼说的SQL LOADER
http://blog.csdn.net/fight_angel/article/details/10114699
------解决方案--------------------1 不要轻易去修改oracle参数,如果你不了解的话。
2 可以使用 insert /*+append */ into t1......
------解决方案--------------------BULK COLLECT + FORALL
------解决方案--------------------10楼说的对,用 INSERT INTO t1(id,a,b,c,d) SELECT ......非常方便