您好我正在尝试从MYSQL DB中的一个表中获取50K +行。检索所有数据并将其写入文本文件需要20多分钟。我可以使用多线程来减少这个获取时间并使代码更有效。任何帮助将不胜感激。
我使用了普通的JDBC连接和ResultSetMetaData来从表中获取行。
String row = "";
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from employee_details");
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
while (rs.next()) {
for (int i = 1; i < columnCount; i++) {
row = row + rs.getObject(i) + "|";// check
}
row = row + "\r\n";
}
我正在文本文件中写入获取的值,如下所示。
BufferedWriter writer = new BufferedWriter(new FileWriter(
"C:/Users/430398/Desktop/file/abcd.txt"));
writer.write(row);
writer.close();
答案 0 :(得分:1)
请记住,rs.next将以n个批次从数据库中获取结果。其中n是JDBC-Implementation定义的数字。我现在假设现在是10岁。因此,对于每10个批次,它将再次查询数据库,因此将存在网络开销 - 即使它在同一台机器上。
只需增加该数字即可加快加载时间。
编辑:
加上这个
stmt.setFetchSize(50000);
可能是它。
请注意,这会导致大量内存消耗。
答案 1 :(得分:0)
首先,您需要确定瓶颈所在。是SQL查询吗?或者通过ResultSet获取行?还是建造巨大的绳子?或者也许写文件?
您需要测量上述算法各个部分的持续时间并告诉我们结果。没有这方面的知识就无法告诉如何加速算法。