preparedstatement executeupdate executebatch example batch java performance jdbc batch-file insert

java - executeupdate - preparedstatement executebatch



¡La inserción de lotes JDBC está LENTO! Quiero decir, ¿REALMENTE LENTO? (1)

Aquí está el trato:

  1. Creo una conexión de conexión usando el DriverManager
  2. Configuro conn.autoCommit(false);
  3. Luego, tengo PreparedStatement pStat = conn.prepareStatement(insert_string_with_parameter);
  4. Establecí varios parámetros con pStat.set ... luego agregué el lote con pStat.addBatch();
  5. Cada 10000 filas (llamo addBatch() 10000 veces), llamo pStat.executeBatch();
  6. No estoy seguro si es necesario, pero llamo también pStat.clearBatch() inmediatamente después

Incluso si todo lo anterior me suena bien, ¡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 debería tratar de agregar en cada ciclo de lote? ¿Son 10000 demasiados?