Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mengoptimumkan Sisipan Batch JDBC untuk Prestasi MySQL Maksimum?

Bagaimanakah Saya Boleh Mengoptimumkan Sisipan Batch JDBC untuk Prestasi MySQL Maksimum?

DDD
Lepaskan: 2024-12-07 13:38:16
asal
322 orang telah melayarinya

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

Mengoptimumkan Prestasi Sisipan Batch JDBC

Memasukkan volum data yang besar ke dalam pangkalan data MySQL memerlukan pemprosesan kelompok yang cekap untuk memastikan prestasi optimum. Walaupun kumpulan memasukkan 1 juta rekod pada satu masa mungkin kelihatan munasabah, terdapat teknik untuk mengoptimumkan lagi proses ini.

Memahami Isu

Kod yang disediakan menggunakan pernyataan yang disediakan untuk memasukkan nilai ke dalam jadual, tetapi ia tidak memanfaatkan dua kunci properties:

  • useServerPrepStmts: Apabila ditetapkan kepada false, MySQL akan menyediakan pernyataan pada pelayan dan bukannya klien, mengurangkan overhed rangkaian.
  • rewriteBatchedStatements: Apabila ditetapkan kepada benar, MySQL akan menulis semula pernyataan berkelompok untuk menggunakan yang lebih cekap kaedah pelaksanaan berbilang pernyataan.

Mengoptimumkan Sambungan

Untuk mendayakan pengoptimuman ini, tetapkan kedua-dua sifat dalam URL sambungan:

Connection c = DriverManager.getConnection("jdbc:mysql://host:3306/db?useServerPrepStmts=false&rewriteBatchedStatements=true", "username", "password");
Salin selepas log masuk

Kod Diubah Suai

Dengan pengoptimuman ini di tempatnya, kod yang dikemas kini menjadi:

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();
}
Salin selepas log masuk

Kesimpulan

Dengan menetapkan sifat "useServerPrepStmts" dan "rewriteBatchedStatements", proses sisipan kelompok boleh dioptimumkan dengan ketara , mengurangkan masa berlalu yang diperlukan untuk memasukkan volum data yang besar.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Sisipan Batch JDBC untuk Prestasi MySQL Maksimum?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan