Viele Datensätze mit JDBC performant in MySQL schreiben
Neulich musste ich ca. 3 Mio. Datensätze in eine MySQL-Datenbank schreiben und nutzte dafür JDBC & PreparedStatements. Obwohl ich die Inserts via Batch machte, dauerte das Einfügen jeweils ca. 2 Minuten pro Batch (10.000 Datensätze).
Daraufhin recherchierte ich diesen StackOverflow-Post, der mir half, die Performance wesentlich zu verbessern, und zwar durch Hinzufügen zweier Parameter zur Datenbank-URL:
Connection c = DriverManager.getConnection("jdbc:mysql://host:3306/db?useServerPrepStmts=false&rewriteBatchedStatements=true", "username", "password");
Danach dauerte das Einfügen nur noch wenige Sekunden pro 10.000 Datensätze. Von voraussichtlich einem knappen Tag für alle Datensätze konnte ich die Schreibdauer auf wenige Minuten reduzieren.