JDBC 取数太慢了怎么办?

 

Java程序用JDBC连接数据库取数,查询的SQL很简单,数据库负担看起来也不重,也就十几万行数据,要执行十多秒,太慢了,有什么办法提速?

JDBC的性能确实不高,经测试,OracleJDBC读数性能比读文本都慢好多倍。JDBC驱动是数据库厂商提供的包,我们在外部没办法提高性能。

如果数据库负担并不重,可以利用多CPU并行取数的办法来提速。用集算器SPL很容易写出这样的代码,比如这样:


A

B

1

fork to(4)

=connect("ORACLE")

2


=B1.query@x("SELECT * FROM CUSTOMER WHERE MOD(C_CUSTKEY,4)=?",A1-1)

3

=A1.conj()


4个线程分别用JDBC连接数据库取数,读出后的数据再合并起来。如果数据库没什么负担,执行时间差不多能快出4倍。

 

集算器SPL也提供了JDBCJava调用,比如把上面的脚本存成load.dfx,在JAVA代码中以存储过程的方式调用脚本文件:

Class.forName("com.esproc.jdbc.InternalDriver");

con = DriverManager.getConnection("jdbc:esproc:local://");

st = con.prepareCall("call load()");

st.execute();

ResultSet rs = st.getResultSet();

这样就可以享受并行取数的高速了。