Das Einfügen großer Datenmengen in eine Datenbank erfordert effiziente Batch-Insert-Vorgänge. Allerdings kommt es häufig zu Leistungsengpässen. Lassen Sie uns näher auf die Optimierung einer JDBC-Batch-Insert-Implementierung für MySQL-Datenbanken eingehen.
Eine gängige Technik ist das Batch-Einfügen von Daten in Blöcken von einer Million Zeilen, wie im bereitgestellten Code gezeigt. Basierend auf dem Codeausschnitt bleibt das Problem jedoch ungelöst.
Ein entscheidender Schritt ist die Optimierung der Art und Weise, wie vorbereitete Anweisungen verarbeitet werden. Standardmäßig erstellt MySQL möglicherweise clientseitig vorbereitete Anweisungen, was zu einem Mehraufwand führen kann. Durch die Aktivierung der Eigenschaft „useServerPrepStmts“ wird MySQL gezwungen, serverseitig vorbereitete Anweisungen zu verwenden, die effizienter sind.
MySQL verfügt über eine Funktion namens „Batch-Anweisungsumschreiben“, die das Batch-Einfügen erheblich verbessern kann Leistung. Bei Aktivierung über die rewriteBatchedStatements-Eigenschaft schreibt MySQL einzelne Einfügeanweisungen in eine einzige Batch-Anweisung um und reduziert so Netzwerk-Roundtrips.
Hier ist der geänderte Codeausschnitt mit den vorgeschlagenen Optimierungen:
Connection c = DriverManager.getConnection( "jdbc:mysql://host:3306/db?useServerPrepStmts=false&rewriteBatchedStatements=true", "username", "password" ); ... // Disable auto-commit c.setAutoCommit(false); // Create a prepared statement String sql = "INSERT INTO mytable (xxx), VALUES(?)"; PreparedStatement pstmt = c.prepareStatement(sql); Object[] vals = set.toArray(); for (int i = 0; i < vals.length; i++) { pstmt.setString(1, vals[i].toString()); pstmt.addBatch(); } // Execute the batch int[] updateCounts = pstmt.executeBatch(); System.out.append("inserted " + updateCounts.length);
Durch die Anwendung dieser Optimierungen sollten Sie eine deutliche Verbesserung der JDBC-Batch-Insert-Leistung feststellen für MySQL-Datenbanken.
Das obige ist der detaillierte Inhalt vonWie kann ich JDBC-Batch-Einfügungen für MySQL optimieren, um die Leistung zu verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!