2011-09-01 27 views
8

Este es el trato:¡El lote de JDBC es LENTO! Quiero decir, ¿REALMENTE LENTO?

  1. puedo crear una conexión con el connDriverManager
  2. que establecer conn.autoCommit(false);
  3. Entonces tengo PreparedStatement pStat = conn.prepareStatement(insert_string_with_parameter);
  4. puedo configurar varios parámetros con pStat.set ... entonces añado el lote con pStat.addBatch();
  5. Cada 10000 filas (llamo addBatch() 10000 veces), llamo al pStat.executeBatch();
  6. No estoy seguro si es necesario, pero que llamo también pStat.clearBatch() justo después

Incluso si todo lo anterior suena bien para mí, esto es LENTO !!!.

Tengo un promedio de solo 35 registros (solo 8 columnas en total, solo una clave principal de autoincrementación técnica y algunas restricciones no nulas) por segundo. Calculo que me llevaría una semana insertar todas mis filas de 20M ...

¿Estoy haciendo algo mal?

¿Cuántas filas debo tratar de agregar en cada ciclo de lote? ¿Son 10000 demasiados?

+0

Lo intenté también con 1000 filas en ese momento, pero no vi ninguna mejora significativa ... – Gevorg

+6

Por favor, muestre el SQL, el esquema e indique los índices y desencadenantes que están en la (s) tabla (s) involucradas. – Bohemian

+0

sin índices ni disparadores. Es la tabla más simple que haya existido ... – Gevorg

Respuesta