Inserción y consulta por lotes JDBC vs Insertos individuales con tecla Gernerated
-
27-10-2019 - |
Pregunta
Quiero insertar muchas filas en una tabla que genera las teclas automáticamente. JDBC no garantiza que obtener las claves generadas funcione en una actualización por lotes.
It is implementation-defined as to whether getGeneratedKeys will return
generated values after invoking the executeBatch method.
(JDBC 4.0 Especificación 2006, p. 135).
Tengo dos opciones. Inserte cada fila por separado y obtenga la tecla. O haga un inserto por lotes y luego consulte las teclas.
Para evitar la excursión para consultar múltiples claves, podría usar este enfoque aquí. Con EG 5 declaraciones preparadas con diferentes tamaños. Y luego romper mi "consulta por lotes" en la declaración más pequeña posible.
¿Cuál es el método más rápido?
Solución
Eso depende.
No tengo números si executeBatch()
en realidad es más rápido que usar un PreparedStatement
repetidamente, entonces mi sugerencia es esta:
Intentar si
getGeneratedKeys()
Funciona para su controlador JDBC. Si no funciona, los insertos por placas no funcionarán para usted de todos modos.Escriba un caso de prueba para ambos y mida el rendimiento. Eso le brinda datos reales para basar su decisión. Todo lo demás es solo conjeturas (y el 90% incorrecto del tiempo).
EDITAR Si desea mantener su aplicación DB agnóstico, agregue la prueba a su aplicación y ejecútelo en una tabla de Temp/Prueba. Si la prueba tiene éxito, elija una implementación que utilice actualizaciones por lotes, de lo contrario recurrir a la fuerza bruta.