Heim > Datenbank > MySQL-Tutorial > Wie kann ich JDBC-Batch-Einfügungen für maximale MySQL-Leistung optimieren?

Wie kann ich JDBC-Batch-Einfügungen für maximale MySQL-Leistung optimieren?

DDD
Freigeben: 2024-12-07 13:38:16
Original
314 Leute haben es durchsucht

How Can I Optimize JDBC Batch Inserts for Maximum MySQL Performance?

Optimierung der JDBC-Batch-Einfügungsleistung

Das Einfügen großer Datenmengen in eine MySQL-Datenbank erfordert eine effiziente Stapelverarbeitung, um eine optimale Leistung sicherzustellen. Auch wenn das Batch-Einfügen von 1 Million Datensätzen auf einmal sinnvoll erscheint, gibt es Techniken, um diesen Prozess weiter zu optimieren.

Verstehen des Problems

Der bereitgestellte Code verwendet eine vorbereitete Anweisung zum Einfügen von Werten in eine Tabelle, es werden jedoch nicht zwei Schlüssel genutzt Eigenschaften:

  • useServerPrepStmts: Wenn auf false gesetzt, bereitet MySQL die Anweisung auf dem Server statt auf dem Client vor, wodurch der Netzwerkaufwand reduziert wird.
  • rewriteBatchedStatements: Wenn es auf „true“ gesetzt ist, schreibt MySQL gestapelte Anweisungen neu, um eine effizientere Ausführung mehrerer Anweisungen zu ermöglichen Methode.

Optimieren der Verbindung

Um diese Optimierungen zu aktivieren, legen Sie beide Eigenschaften in der Verbindungs-URL fest:

Connection c = DriverManager.getConnection("jdbc:mysql://host:3306/db?useServerPrepStmts=false&rewriteBatchedStatements=true", "username", "password");
Nach dem Login kopieren

Geänderter Code

Mit diesen Optimierungen ist der aktualisierte Code wird zu:

try {
    // 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);
} catch (SQLException e) {
    e.printStackTrace();
}
Nach dem Login kopieren

Fazit

Durch das Festlegen der Eigenschaften „useServerPrepStmts“ und „rewriteBatchedStatements“ kann der Batch-Einfügungsprozess deutlich optimiert und die benötigte Zeit reduziert werden um große Datenmengen einzufügen.

Das obige ist der detaillierte Inhalt vonWie kann ich JDBC-Batch-Einfügungen für maximale MySQL-Leistung optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage