Método 1:
código java
Copie el código de código de la siguiente manera:
conexión = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
pstmt=conexión
.prepareStatement("insertar en los valores de prueba de carga (id, datos) (?,?)");
para (int i = 1; i <= CONTAR; i++) {
pstmt.clearParameters();
pstmt.setInt(1, i);
pstmt.setString(2, DATOS);
pstmt.execute();
}
MyISAM: 246,6 segundos, InnoDB: 360,2 segundos
Método 2: utilizar transacciones sin confirmación automática
código java
Copie el código de código de la siguiente manera:
conexión = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
conexión.setAutoCommit(falso);
pstmt=conexión
.prepareStatement("insertar en los valores de prueba de carga (id, datos) (?,?)");
para (int i = 1; i <= CONTAR; i++) {
pstmt.clearParameters();
pstmt.setInt(1, i);
pstmt.setString(2, DATOS);
pstmt.execute();
si (yo % COMMIT_SIZE == 0) {
conexión.commit();
}
}
conexión.commit();
InnoDB: 31,5 segundos
Método 3: ejecutarBatch
código java
Copie el código de código de la siguiente manera:
conexión = DriverManager.getConnection(JDBC_URL
+ "?rewriteBatchedStatements=true", JDBC_USER, JDBC_PASS);
conexión.setAutoCommit(falso);
pstmt=conexión
.prepareStatement("insertar en los valores de prueba de carga (id, datos) (?,?)");
para (int i = 1; i <= CONTAR; i += BATCH_SIZE) {
pstmt.clearBatch();
para (int j = 0; j < BATCH_SIZE; j++) {
pstmt.setInt(1, i + j);
pstmt.setString(2, DATOS);
pstmt.addBatch();
}
pstmt.executeBatch();
si ((i + BATCH_SIZE - 1) % COMMIT_SIZE == 0) {
conexión.commit();
}
}
conexión.commit();
InnoDB: 5,2 segundos
Se debe utilizar lo anterior
1) reescribirBatchedStatements = verdadero
2) useServerPrepStmts=verdadero
Método 4: CARGAR primero y luego COMPROMETER
código java
Copie el código de código de la siguiente manera:
conexión = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
conexión.setAutoCommit(falso);
pstmt = conn.prepareStatement("cargar datos en el archivo local '' "
+ "en los campos de prueba de carga de la tabla terminados en ','");
StringBuilder sb = nuevo StringBuilder();
para (int i = 1; i <= CONTAR; i++) {
sb.append(i + "," + DATOS + "/n");
si (yo % COMMIT_SIZE == 0) {
InputStream es = nuevo ByteArrayInputStream(sb.toString()
.getBytes());
((com.mysql.jdbc.Statement) pstmt)
.setLocalInfileInputStream(es);
pstmt.execute();
conexión.commit();
sb.setLength(0);
}
}
InputStream es = new ByteArrayInputStream(sb.toString().getBytes());
((com.mysql.jdbc.Statement) pstmt).setLocalInfileInputStream(is);
pstmt.execute();
conexión.commit();