sql >> Database >  >> RDS >> Mysql

MySQL en JDBC met rewriteBatchedStatements=true

met rewriteBatchedStatements=true zal de JDBC zoveel mogelijk query's in een enkel netwerkpakket verpakken, waardoor de netwerkoverhead wordt verlaagd. Heb ik gelijk?

Ja. De volgende code

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();
    }
}

zal individuele INSERT-instructies verzenden, ook al heb ik een batch gemaakt

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

Als ik echter de verbindingsreeks wijzig om rewriteBatchedStatements=true op te nemen,

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

dan zal JDBC een of meer INSERT-instructies met meerdere rijen verzenden

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

kent JDBC de waarde die is toegewezen aan max_allowed_packet en maakt het daarom het pakket kleiner dan de gedefinieerde waarde voor max_allowed_packet ... ?

Ja. Als u het algemene MySQL-logboek inschakelt en dit aanvinkt, zult u zien dat MySQL Connector/J een aantal variabelen inspecteert wanneer het verbinding maakt, waaronder max_allowed_packet . Je kunt ook een klein max_allowed_packet . instellen waarde en controleer of JDBC een batch splitst in meerdere INSERT-instructies met meerdere rijen als een enkele dergelijke instructie voor de hele batch max_allowed_packet zou overschrijden .




  1. Kunnen we parameters doorgeven aan een weergave in SQL?

  2. Meest efficiënte manier om het aantal rijen in de tabel te krijgen

  3. MySQL migreren naar PostgreSQL op AWS RDS, deel 2

  4. De env-variabele gebruiken in Application.properties van Spring Boot