Tengo el siguiente codigo
Código:
El cual se encarga de hacer insert masivos sobre una tabla temporal. Los registros vienen en el ArrayList lista. Estos datos se han obtenido previamente de otra base de datos SQLServer.public void rellenaTablaTemporal (Connection con, ArrayList lista) throws SQLException { System.out.println("bd.inicio" + new java.util.Date()); String consulta = "INSERT INTO CONTAB_TMP_MOVIMIENTOS (ANIO, CTA, DEB_HAB, IMPORTE) VALUES (?,?,?,?)"; PreparedStatement ps = con.prepareStatement(consulta); TablaHash tabla = null; if (lista.size() > 0) { for (int i=0;i<lista.size();i++) { tabla = (TablaHash) lista.get(i); ps.setInt(1,tabla.getInt("anio")); ps.setString(2,tabla.getString("cta","")); ps.setString(3,tabla.getString("debehab","")); ps.setFloat(4, tabla.getFloat("total")); ps.executeUpdate(); } con.commit(); ps.close(); } System.out.println("bd.fin" + new java.util.Date()); }
TablaHash es una Hashtable 'tuneada' para obtener los valores de esos registros.
El problema como podeis imaginar esta en los tiempos. Con pocos registros esto es inmediato, pero a partir de los 5000 registros crece bastante.
En concreto con 7000 registros esta en torno a los 17 segundos (segundo arriba segundo abajo). Esto para el usuario es inadmisible.
Me podriais ayudar a reducir este tiempo?? O en cambio le pongo un mensaje al usuario diciendole que se vaya a tomar un cafe?? :D
Gracias.
elAntonie.
PD. Con hibernate el tiempo es similar.