使用oracle bulk collect 提高select FETCH LOOP的速度

jidongzheng發表於2011-06-07

透過oracle一個特性,加快客戶端SELECT LOOP資料的速度。

使用的特性是oracle bulk collect into 技術。

實現方法如下:

1) 在資料庫中配置:

一次性返回2000條記錄

create or replace procedure pro_test(v_1 out i_table, v_2 out v_table) as

begin
select id, name BULK COLLECT INTO v_1, v_2 from a where rownum <2000 />end;

[@more@]

2 ) 透過JAVA編碼,在客戶端使用oracle.sql.array

一次性取到所有資料,這比在客戶端select 後,再loop速度快多了。

oracle.sql.ARRAY a_test = new oracle.sql.ARRAY(a, oraCon, s1);
oracle.sql.ARRAY b_test = new oracle.sql.ARRAY(b, oraCon, s2);
long aaaa = System.currentTimeMillis();
PreparedStatement pstmt = null;
pstmt = oraCon.prepareCall("{ call pro_test(?,?) }");
pstmt.setObject(1, a_test);
pstmt.setObject(2, b_test);
pstmt.executeUpdate();

測試結果:10000條記錄:

開始時間: 1307497501265
aaa0
結束時間:1307497501421

而透過正常的PL/SQL,則需要4.5秒。

可見,速度提升還是很明顯的

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/197458/viewspace-1050890/,如需轉載,請註明出處,否則將追究法律責任。

相關文章