Я пытаюсь прочитать таблицу с сервера Sybase, обработать строки и вывести результаты в другую таблицу.(Ниже мой код)
Код извлекает таблицу довольно быстро и обрабатывает одинаково быстро (добраться до той части, куда она отправляет в течение 30 секунд).Но когда я запускаю execute batch, он сидит там за 20 минут до финиша (к примеру, у меня есть таблица, которую я тестирую с 8400 строками).
Есть ли более эффективный способ сделать это?Я подхожу к тому, как я могу получать или отправлять запросы (я могу создать новую таблицу, обновить таблицу и т. Д.) - я просто не знаю, почему это так медленно (я уверен, что данные <1МБ, и я уверен, что SQL-серверу не понадобится 20 минут для анализа 8400 строк).Любые идеи? </p>
Примечание: причина, по которой это действительно плохо для меня, заключается в том, что я должен проанализировать таблицу с строками 1,2 ММ (эта таблица, с которой я сейчас работаю, является тестовой таблицей с 8400 строками)1007 *
Connection conn = DriverManager.getConnection(conString, user, pass);
String sql = "SELECT id,dateid,attr from user.fromtable";
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
String sqlOut = "INSERT INTO user.mytabletest (id,attr,date,estEndtime) values (?,?,?,?)";
PreparedStatement ps = conn.prepareStatement(sqlOut);
int i=1;
while(rs.next())
{
int date = rs.getInt("dateid");
String attr = rs.getString("attr");
String id = rs.getString("id");
Time tt = getTime(date,attr);
Timestamp ts = new Timestamp(tt.getTime());
ps.setString(1, id);
ps.setString(2, attr);
ps.setInt(3, date);
ps.setTimestamp(4, ts);
ps.addBatch();
if(i % 10000 == 0)
{
System.out.println(i);
ps.executeBatch();
conn.commit();
ps.clearBatch();
}
i++;
}
System.out.println("sending "+(new Date()));
int[] results = ps.executeBatch();
System.out.println("committing "+(new Date()));
conn.commit();
System.out.println("done "+(new Date()));