Inserto batch JDBC e query contro inserti singoli con chiave gernate
-
27-10-2019 - |
Domanda
Voglio inserire molte righe in una tabella che genera automaticamente le chiavi. JDBC non garantisce che ottenere le chiavi generate funzionerà su un aggiornamento batch.
It is implementation-defined as to whether getGeneratedKeys will return
generated values after invoking the executeBatch method.
(Specifica JDBC 4.0 2006, p. 135).
Ho due scelte. Inserire ogni riga separatamente e ottenere il Key o fare un inserto batch e quindi interrogare per i tasti.
Per evitare il viaggio di andata e ritorno per interrogare più chiavi, potrei usare questo approccio qui. Avere dichiarazioni EG 5 preparate con dimensioni diverse. E poi rompere la mia "query batch" nella più piccola affermazione possibile.
Qual è il metodo più veloce?
Soluzione
Dipende.
Non ho numeri se executeBatch()
in realtà è più veloce che usare un PreparedStatement
ripetutamente, quindi il mio suggerimento è questo:
Prova se
getGeneratedKeys()
Funziona per il tuo driver JDBC. Se non funziona, gli inserti in lotta non funzionano comunque per te.Scrivi un caso di prova per entrambi e misura le prestazioni. Questo ti dà dati reali su cui basare la tua decisione. Tutto il resto è solo congetture (e sbagliato il 90% delle volte).
MODIFICARE Se vuoi mantenere la tua app DB Agnostic, aggiungi il test alla tua app ed eseguilo su una tabella temperatura/test. Se il test ha successo, ha scelto un'implementazione che utilizza aggiornamenti batch, altrimenti rientrare alla forza bruta.