ホームページ > データベース > mysql チュートリアル > MySQL のパフォーマンスを最大化するために JDBC バッチ挿入を最適化するにはどうすればよいですか?

MySQL のパフォーマンスを最大化するために JDBC バッチ挿入を最適化するにはどうすればよいですか?

DDD
リリース: 2024-12-07 13:38:16
オリジナル
321 人が閲覧しました

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

JDBC バッチ挿入パフォーマンスの最適化

MySQL データベースに大量のデータを挿入するには、最適なパフォーマンスを確保するために効率的なバッチ処理が必要です。一度に 100 万件のレコードをバッチ挿入するのは合理的なように思えるかもしれませんが、このプロセスをさらに最適化する手法があります。

問題を理解する

提供されたコードはプリペアド ステートメントを使用しています。テーブルに値を挿入しますが、2 つのキーは利用しませんproperty:

  • useServerPrepStmts: false に設定すると、MySQL はクライアントではなくサーバー上でステートメントを準備し、ネットワーク オーバーヘッドを削減します。
  • rewriteBatchedStatements: true に設定すると、MySQL はバッチ処理されたステートメントを書き換えて、より効率的なステートメントを使用します。マルチステートメントの実行メソッド。

接続の最適化

これらの最適化を有効にするには、接続 URL で両方のプロパティを設定します。

Connection c = DriverManager.getConnection("jdbc:mysql://host:3306/db?useServerPrepStmts=false&rewriteBatchedStatements=true", "username", "password");
ログイン後にコピー

改造コード

これで最適化が行われると、更新されたコードは次のようになります。

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();
}
ログイン後にコピー

結論

「useServerPrepStmts」プロパティと「rewriteBatchedStatements」プロパティを設定することで、バッチ挿入プロセスを大幅に短縮できます。最適化され、大量のデータの挿入に必要な経過時間が短縮されます。

以上がMySQL のパフォーマンスを最大化するために JDBC バッチ挿入を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート