Método 1:
Código Java
Copie o código do código da seguinte forma:
conexão = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
pstmt = conexão
.prepareStatement("inserir em valores de loadtest (id, dados) (?, ?)");
for (int i = 1; i <= CONTAGEM; i++) {
pstmt.clearParameters();
pstmt.setInt(1, i);
pstmt.setString(2, DADOS);
pstmt.execute();
}
MyISAM: 246,6 segundos, InnoDB: 360,2 segundos
Método 2: Use transações sem confirmação automática
Código Java
Copie o código do código da seguinte forma:
conexão = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
conn.setAutoCommit(falso);
pstmt = conexão
.prepareStatement("inserir em valores de loadtest (id, dados) (?, ?)");
for (int i = 1; i <= CONTAGEM; i++) {
pstmt.clearParameters();
pstmt.setInt(1, i);
pstmt.setString(2, DADOS);
pstmt.execute();
if (i% COMMIT_SIZE == 0) {
conn.commit();
}
}
conn.commit();
InnoDB: 31,5 segundos
Método 3: executeBatch
Código Java
Copie o código do código da seguinte forma:
conexão = DriverManager.getConnection(JDBC_URL
+ "?rewriteBatchedStatements=true", JDBC_USER, JDBC_PASS);
conn.setAutoCommit(falso);
pstmt = conexão
.prepareStatement("inserir em valores de loadtest (id, dados) (?, ?)");
for (int i = 1; i <= CONTAGEM; i += BATCH_SIZE) {
pstmt.clearBatch();
for (int j = 0; j < BATCH_SIZE; j++) {
pstmt.setInt(1, i + j);
pstmt.setString(2, DADOS);
pstmt.addBatch();
}
pstmt.executeBatch();
if ((i + BATCH_SIZE - 1)% COMMIT_SIZE == 0) {
conn.commit();
}
}
conn.commit();
InnoDB: 5,2 segundos
O acima deve ser usado
1) rewriteBatchedStatements=true
2) useServerPrepStmts=true
Método 4: LOAD primeiro e depois COMMIT
Código Java
Copie o código do código da seguinte forma:
conexão = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
conn.setAutoCommit(falso);
pstmt = conn.prepareStatement("carregar dados no arquivo local '' "
+ "nos campos loadtest da tabela terminados por ','");
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= CONTAGEM; i++) {
sb.append(i + "," + DADOS + "/n");
if (i% COMMIT_SIZE == 0) {
InputStream é = new ByteArrayInputStream(sb.toString()
.getBytes());
((com.mysql.jdbc.Statement)pstmt)
.setLocalInfileInputStream(é);
pstmt.execute();
conn.commit();
sb.setLength(0);
}
}
InputStream é = new ByteArrayInputStream(sb.toString().getBytes());
((com.mysql.jdbc.Statement) pstmt).setLocalInfileInputStream(is);
pstmt.execute();
conn.commit();