java - executeupdate - preparedstatement executebatch
¡La inserción de lotes JDBC está LENTO! Quiero decir, ¿REALMENTE LENTO? (1)
Aquí está el trato:
- Creo una conexión de conexión usando el
DriverManager
- Configuro
conn.autoCommit(false);
- Luego, tengo
PreparedStatement pStat = conn.prepareStatement(insert_string_with_parameter);
- Establecí varios parámetros con pStat.set ... luego agregué el lote con
pStat.addBatch();
- Cada 10000 filas (llamo
addBatch()
10000 veces), llamopStat.executeBatch();
- 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?
Si está utilizando MySQL con un controlador JDBC en torno a la versión 5.1.7, puede verse afectado por un error que ralentiza las inserciones por lotes . La actualización a 5.1.10 o posterior debe solucionarlo .