ホームページ >データベース >mysql チュートリアル >MySQL の JDBC バッチ挿入を最適化してパフォーマンスを向上するにはどうすればよいですか?
データベースに大量のデータを挿入するには、効率的なバッチ挿入操作が必要です。ただし、パフォーマンスのボトルネックが発生することはよくあります。 MySQL データベース用の JDBC バッチ挿入実装の最適化について詳しく見てみましょう。
提供されたコードで示されているように、一般的な手法は、100 万行のチャンクにデータをバッチ挿入することです。ただし、コード スニペットによると、この問題は未解決のままです。
重要な手順は、Prepared Statement の処理方法を最適化することです。デフォルトでは、MySQL はクライアント側でプリペアド ステートメントを作成する場合があり、これによりオーバーヘッドが発生する可能性があります。 useServerPrepStmts プロパティを有効にすると、MySQL はサーバー側でプリペアド ステートメントを使用するようになり、より効率的になります。
MySQL には、バッチ挿入を大幅に強化できる「バッチ ステートメントの書き換え」と呼ばれる機能があります。パフォーマンス。 rewriteBatchedStatements プロパティで有効にすると、MySQL は個々の insert ステートメントを 1 つのバッチ ステートメントに書き換え、ネットワークのラウンド トリップを削減します。
提案された最適化を使用して変更されたコード スニペットは次のとおりです。
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);
これらの最適化を適用すると、大幅な改善が見られるはずですMySQL データベースの JDBC バッチ挿入パフォーマンス。
以上がMySQL の JDBC バッチ挿入を最適化してパフォーマンスを向上するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。