大数据量快速插入

时间:2023-01-11 23:35:17
insert /**//*+append*/ into gis select * from typhoon_insert_temp;
insert into gis select * from typhoon_insert_temp;



我看了下执行计划是一样的,为什么有的高手说上面的要快速一点呢?

而且/**//*+append*/  在plsql中我怎么看他是被注释掉的?

5 个解决方案

#1


是/*+ append */
要想速度更快,根据具体情况,可配合nologging和parallel来。

#2


引用楼主 wangzhe696 的回复:
insert /**//*+append*/ into gis select * from typhoon_insert_temp;
 insert into gis select * from typhoon_insert_temp;


 我看了下执行计划是一样的,为什么有的高手说上面的要快速一点呢?

 而且/**//*+append*/  在plsql中我怎么看他是被注释掉的?


你看的主要是执行计划里的执行路径吧,这个hint主要是 优化insert的时候,直接在数据块后面做append,从而会提高速度。对于执行路径没有差别。如果可以去掉目标表的index的话,也会提高insert速度。

#3


1、2楼说的有理

#4


/*+APPEND* 配合NOLOGGING 效果更好
给你附带另外一些东西 网上可以搜到


24. /*+USE_HASH(TABLE)*/ 
将指定的表与其他行源通过哈希连接方式连接起来. 
例如: 
SELECT /*+USE_HASH(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO; 

25. /*+DRIVING_SITE(TABLE)*/ 
强制与ORACLE所选择的位置不同的表进行查询执行. 
例如: 
SELECT /*+DRIVING_SITE(DEPT)*/ * FROM BSEMPMS,DEPT@BSDPTMS WHERE BSEMPMS.DPT_NO=DEPT.DPT_NO; 

#5


批量插入 你可以试试用  BULK CONNECT 和 forall 结合起来使用 

#1


是/*+ append */
要想速度更快,根据具体情况,可配合nologging和parallel来。

#2


引用楼主 wangzhe696 的回复:
insert /**//*+append*/ into gis select * from typhoon_insert_temp;
 insert into gis select * from typhoon_insert_temp;


 我看了下执行计划是一样的,为什么有的高手说上面的要快速一点呢?

 而且/**//*+append*/  在plsql中我怎么看他是被注释掉的?


你看的主要是执行计划里的执行路径吧,这个hint主要是 优化insert的时候,直接在数据块后面做append,从而会提高速度。对于执行路径没有差别。如果可以去掉目标表的index的话,也会提高insert速度。

#3


1、2楼说的有理

#4


/*+APPEND* 配合NOLOGGING 效果更好
给你附带另外一些东西 网上可以搜到


24. /*+USE_HASH(TABLE)*/ 
将指定的表与其他行源通过哈希连接方式连接起来. 
例如: 
SELECT /*+USE_HASH(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO; 

25. /*+DRIVING_SITE(TABLE)*/ 
强制与ORACLE所选择的位置不同的表进行查询执行. 
例如: 
SELECT /*+DRIVING_SITE(DEPT)*/ * FROM BSEMPMS,DEPT@BSDPTMS WHERE BSEMPMS.DPT_NO=DEPT.DPT_NO; 

#5


批量插入 你可以试试用  BULK CONNECT 和 forall 结合起来使用