Java 读取jdbc结果集的速度很慢
我正在从一个结果集读取数据,它看起来很慢(也许,很遗憾,这正是你可以得到的速度) 我在读568365行5列。我已经分解了代码并添加了计时器,以查看在哪里花费的时间最多Java 读取jdbc结果集的速度很慢,java,sql-server,jdbc,Java,Sql Server,Jdbc,我正在从一个结果集读取数据,它看起来很慢(也许,很遗憾,这正是你可以得到的速度) 我在读568365行5列。我已经分解了代码并添加了计时器,以查看在哪里花费的时间最多 ResultSet.next() - about 65ms ResultSet.wasNull() - about 150ms ResultSet.getString/Double() - about 1000ms 因此,我希望减少获得弦乐/双打的时间 我的连接正在创建: DriverManager.getConnection(
ResultSet.next() - about 65ms
ResultSet.wasNull() - about 150ms
ResultSet.getString/Double() - about 1000ms
因此,我希望减少获得弦乐/双打的时间
我的连接正在创建:
DriverManager.getConnection("jdbc:sqlserver://server:1433;databaseName=dbname", "user", "pass")
conn.createStatement()
我的发言:
DriverManager.getConnection("jdbc:sqlserver://server:1433;databaseName=dbname", "user", "pass")
conn.createStatement()
我试着玩“setFetchSize”(1000、10000、500000)和“selectMethod=cursor/direct”,但运气不好
我只知道如何循环和检索数据,所以如果有任何其他点击或设置,我可以尝试给JDBC
我的代码是(带计时器):
private List getResultRows(ResultSet queryResult)抛出SQLException{
列表行=新建ArrayList();
ResultSetMetaData rsmd=queryResult.getMetaData();
int colNumber=rsmd.getColumnCount();
int[]colTypes=新int[colNumber];
for(int i=0;i
在您看来,为什么1000毫秒读取568365行的5列速度慢?我猜“next()”会是慢的部分。它不是要到服务器上获取一大块行吗?为什么从resultset读取单元格的速度很慢?它不是已经在记忆中了吗?(事实上,我在其他帖子中也看到有人抱怨“next()”速度慢,而不是阅读速度慢);这在很大程度上取决于驱动程序的实现,等等。首先,获取大小使得它可以分块检索,网络本身可以用作缓冲区:驱动程序可以提前请求更多行,并且只有在真正需要时才从流中读回这些行。第二,将原始字节解码并转换为请求的值可能需要大量时间。那么,我是否可以尝试减少时间?有什么关于jdbc的提示吗?正如我之前所说的,您首先需要问问自己,这是否真的很慢。四舍五入时,您可能会在568365行上花费1.3秒,即每行2.2微秒。