sql >> データベース >  >> RDS >> Mysql

rewriteBatchedStatements=trueを使用したMySQLおよびJDBC

    rewriteBatchedStatements =trueを使用すると、JDBCは可能な限り多くのクエリを単一のネットワークパケットにパックし、この方法でネットワークオーバーヘッドを削減します。私は正しいですか?

    はい。次のコード

    String myConnectionString =
            "jdbc:mysql://localhost:3307/mydb?" +
            "useUnicode=true&characterEncoding=UTF-8";
    try (Connection con = DriverManager.getConnection(myConnectionString, "root", "whatever")) {
        try (PreparedStatement ps = con.prepareStatement("INSERT INTO jdbc (`name`) VALUES (?)")) {
            for (int i = 1; i <= 5; i++) {
                ps.setString(1, String.format(
                        "Line %d: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", 
                        i));
                ps.addBatch();
            }
            ps.executeBatch();
        }
    }
    

    バッチを作成した場合でも、個々のINSERTステートメントを送信します

    INSERT INTO jdbc (`name`) VALUES ('Line 1: Lorem ipsum ...')
    INSERT INTO jdbc (`name`) VALUES ('Line 2: Lorem ipsum ...')
    

    ただし、接続文字列を変更してrewriteBatchedStatements=trueを含めると

    String myConnectionString =
            "jdbc:mysql://localhost:3307/mydb?" +
            "useUnicode=true&characterEncoding=UTF-8" +
            "&rewriteBatchedStatements=true";
    

    次に、JDBCは1つ以上の複数行のINSERTステートメントを送信します

    INSERT INTO jdbc (`name`) VALUES ('Line 1: Lorem ipsum ...'),('Line 2: Lorem ipsum ...')
    

    JDBCはmax_allowed_pa​​cketに割り当てられた値を認識しているため、パケットをmax_allowed_pa​​cketの定義値よりも小さくしますか...?

    はい。 MySQL一般ログを有効にしてチェックすると、MySQL Connector/Jが接続時に一連の変数を検査することがわかります。そのうちの1つはmax_allowed_packetです。 。小さなmax_allowed_packetを設定することもできます 値を設定し、バッチ全体の単一のそのようなステートメントがmax_allowed_packetを超える場合、JDBCがバッチを複数の複数行のINSERTステートメントに分割することを確認します。 。




    1. SQLのLIKE演算子について知っておくべきことすべて

    2. プロパティマネージャーがデータベースを使用して効率を向上させる方法

    3. オプティマイザーがバッファープールの知識を使用しない理由

    4. 列内の重複するエントリを検索する