看见朋友导入数据,花了很长时间都没完成!其实有很多快速的方法,整理下!

 
  
  1. 向表中插入数据有很多办法,但是方法不同,性能差别很大. 
  2.  
  3.  
  4. ----1.原始语句 
  5. drop table t1 purge; 
  6.  
  7. create table t1 
  8. sid number, 
  9. sname varchar2(20) 
  10. ) tablespace test; 
  11.  
  12.  
  13.  
  14. create or replace procedure proc01 
  15. sname varchar2 
  16. as 
  17. begin 
  18.     for i in 1..10000000 
  19.     loop 
  20.         execute immediate 
  21.         'insert into t1(sid,sname) values('||i||','''||sname||''')'
  22.     commit
  23.     end loop; 
  24. end
  25.  
  26.  
  27.  
  28. alter system flush shared_pool; 
  29.  
  30. set timing on
  31.  
  32. exec proc01('ocpyangtest'); 
  33.  
  34. 已用时间:  02: 02: 54.12 
  35.  
  36.  
  37.  
  38.  
  39.  
  40. ----2.绑定变量 
  41.  
  42.  
  43.  
  44. drop table t1 purge; 
  45.  
  46. create table t1 
  47. sid number, 
  48. sname varchar2(20) 
  49. ) tablespace test; 
  50.  
  51.  
  52. create or replace procedure proc02 
  53. sname varchar2 
  54. as 
  55. begin 
  56.     for i in 1..10000000 
  57.     loop 
  58.         execute immediate 
  59.     'insert into t1(sid,sname) values(:no'||','''||sname||''')' using i; 
  60.     commit
  61.     end loop; 
  62. end
  63.  
  64.  
  65.  
  66. alter system flush shared_pool; 
  67.  
  68. set timing on
  69.  
  70. exec proc02('ocpyangtest'); 
  71.  
  72. 已用时间:  00: 22: 59.79 
  73.  
  74.  
  75. select count(*) from t1; 
  76.  
  77.  
  78. ----3.静态语句 
  79.  
  80.  
  81.  
  82. drop table t1 purge; 
  83.  
  84. create table t1 
  85. sid number, 
  86. sname varchar2(20) 
  87. ) tablespace test; 
  88.  
  89.  
  90.  
  91.  
  92. create or replace procedure proc03 
  93. as 
  94. begin 
  95.     for i in 1..10000000 
  96.     loop 
  97.          
  98.     insert into t1 values(i,'ocpyangtest'); 
  99.     commit
  100.     end loop; 
  101. end
  102.  
  103. alter system flush shared_pool; 
  104.  
  105. set timing on
  106.  
  107. exec proc03; 
  108.  
  109. 已用时间:  00: 20: 42.42 
  110.  
  111. select count(*) from t1; 
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118. ----4.批量提交 
  119.  
  120.  
  121. drop table t1 purge; 
  122.  
  123. create table t1 
  124. sid number, 
  125. sname varchar2(20) 
  126. ) tablespace test; 
  127.  
  128.  
  129.  
  130.  
  131. create or replace procedure proc04 
  132. as 
  133. begin 
  134.     for i in 1..10000000 
  135.     loop         
  136.     insert into t1 values(i,'ocpyangtest'); 
  137.     end loop; 
  138.     commit
  139. end
  140.  
  141.  
  142. alter system flush shared_pool; 
  143.  
  144. set timing on
  145.  
  146. exec proc04; 
  147.  
  148. 已用时间:  00: 11: 48.42 
  149.  
  150.  
  151.  
  152. ----5.集合 
  153.  
  154.  
  155. drop table t2 purge; 
  156.  
  157. create table t2 
  158. sid number, 
  159. sname varchar2(20) 
  160. ) tablespace test; 
  161.  
  162.  
  163.  
  164.  
  165. alter system flush shared_pool; 
  166.  
  167. select count(*) from t1; 
  168.  
  169.  
  170. set timing on
  171.  
  172.  
  173.  
  174. insert into t2 select sid,sname from t1; 
  175.  
  176.  
  177. 已用时间:  00: 01: 02.18 
  178.  
  179. commit
  180.  
  181.  
  182. select count(*) from t2; 
  183.  
  184.  
  185.  
  186. ----6. 集合+append 
  187.  
  188.  
  189. drop table t2 purge; 
  190.  
  191. create table t2 
  192. sid number, 
  193. sname varchar2(20) 
  194. ) tablespace test; 
  195.  
  196.  
  197.  
  198.  
  199. alter system flush shared_pool; 
  200.  
  201.  
  202. select count(*) from t1; 
  203.  
  204.  
  205.  
  206. set timing on
  207.  
  208.  
  209.  
  210. insert /*  + append */ into t2 select sid,sname from t1; 
  211.  
  212. 已用时间:  00: 00: 36.94 
  213.  
  214.  
  215. commit
  216.  
  217.  
  218. select count(*) from t2; 
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225. ----7. 集合+append+nologging 
  226.  
  227.  
  228. drop table t2 purge; 
  229.  
  230. create table t2  
  231. sid number, 
  232. sname varchar2(20) 
  233. ) nologging tablespace test; 
  234.  
  235.  
  236.  
  237.  
  238. alter system flush shared_pool; 
  239.  
  240.  
  241. select count(*) from t1; 
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248. set timing on
  249.  
  250.  
  251. insert /*  + append */ into t2 select sid ,sname from t1; 
  252.  
  253. 已用时间:  00: 00: 35.07 
  254.  
  255. commit
  256.  
  257.  
  258. select count(*) from t2; 
  259.  
  260.  
  261.  
  262.  
  263.  
  264.   
  265. ----8.数据加载1 
  266.  
  267.  
  268. drop table t2 purge; 
  269.  
  270.  
  271.  
  272. alter system flush shared_pool; 
  273.  
  274. select count(*) from t1; 
  275.  
  276.  
  277.  
  278. set timing on
  279.  
  280.  
  281.  
  282. create table t2 
  283. as 
  284. select sid,sname from t1; 
  285.  
  286. 已用时间:  00: 00: 25.91 
  287.  
  288.  
  289.  
  290. select count(*) from t2; 
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297. ----9.数据加载2 
  298.  
  299.  
  300. drop table t2 purge; 
  301.  
  302.  
  303.  
  304.  
  305. alter system flush shared_pool; 
  306.  
  307. select count(*) from t1; 
  308.  
  309.  
  310.  
  311. set timing on
  312.  
  313.  
  314.  
  315. create table t2 nologging 
  316. as 
  317. select sid,sname from t1; 
  318.  
  319. 已用时间:  00: 00: 04.89 
  320.  
  321.  
  322.  
  323. select count(*) from t2; 
  324.  
  325.  
  326.  
  327. ----10.数据加载+并行 
  328.  
  329.  
  330. drop table t2 purge; 
  331.  
  332.  
  333.  
  334.  
  335. alter system flush shared_pool; 
  336.  
  337. select count(*) from t1; 
  338.  
  339.  
  340.  
  341. set timing on
  342.  
  343.  
  344.  
  345. create table t2 nologging parallel 24   --根据自己服务器情况 
  346. as 
  347. select sid,sname from t1; 
  348.  
  349. 已用时间:  00: 00: 02.89 
  350.  
  351.  
  352. select count(*) from t2;