Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/06/2009, 05:43
Avatar de elAntonie
elAntonie
 
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 11 meses
Puntos: 10
Problemas de tiempo al hacer insert masivos sobre una tabla temporal oracle

Wenas.

Tengo el siguiente codigo

Código:
    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());

    }
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.
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.

Última edición por elAntonie; 19/06/2009 a las 05:55