Méthode 1 :
Code Java
Copiez le code comme suit :
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
pstmt=conn
.prepareStatement("insérer dans les valeurs de test de chargement (id, données) (?, ?)");
pour (int i = 1; i <= COUNT; i++) {
pstmt.clearParameters();
pstmt.setInt(1, i);
pstmt.setString(2, DONNÉES);
pstmt.execute();
}
MyISAM : 246,6 secondes, InnoDB : 360,2 secondes
Méthode 2 : utiliser des transactions sans validation automatique
Code Java
Copiez le code comme suit :
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
conn.setAutoCommit(false);
pstmt=conn
.prepareStatement("insérer dans les valeurs de test de chargement (id, données) (?, ?)");
pour (int i = 1; i <= COUNT; i++) {
pstmt.clearParameters();
pstmt.setInt(1, i);
pstmt.setString(2, DONNÉES);
pstmt.execute();
si (i % COMMIT_SIZE == 0) {
conn.commit();
}
}
conn.commit();
InnoDB : 31,5 secondes
Méthode 3 : exécuterBatch
Code Java
Copiez le code comme suit :
conn = DriverManager.getConnection(JDBC_URL
+ "?rewriteBatchedStatements=true", JDBC_USER, JDBC_PASS);
conn.setAutoCommit(false);
pstmt=conn
.prepareStatement("insérer dans les valeurs de test de chargement (id, données) (?, ?)");
pour (int i = 1; i <= COUNT; i += BATCH_SIZE) {
pstmt.clearBatch();
pour (int j = 0; j < BATCH_SIZE; j++) {
pstmt.setInt(1, i + j);
pstmt.setString(2, DONNÉES);
pstmt.addBatch();
}
pstmt.executeBatch();
si ((i + BATCH_SIZE - 1) % COMMIT_SIZE == 0) {
conn.commit();
}
}
conn.commit();
InnoDB : 5,2 secondes
Ce qui précède doit être utilisé
1) rewriteBatchedStatements=true
2) useServerPrepStmts=true
Méthode 4 : LOAD d’abord, puis COMMIT
Code Java
Copiez le code comme suit :
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
conn.setAutoCommit(false);
pstmt = conn.prepareStatement("charger les données dans le fichier local '' "
+ "dans les champs de test de chargement de la table terminés par ','");
StringBuilder sb = new StringBuilder();
pour (int i = 1; i <= COUNT; i++) {
sb.append(i + "," + DATA + "/n");
si (i % COMMIT_SIZE == 0) {
InputStream est = new ByteArrayInputStream(sb.toString()
.getBytes());
((com.mysql.jdbc.Statement) pstmt)
.setLocalInfileInputStream(est);
pstmt.execute();
conn.commit();
sb.setLength(0);
}
}
InputStream est = new ByteArrayInputStream(sb.toString().getBytes());
((com.mysql.jdbc.Statement) pstmt).setLocalInfileInputStream(is);
pstmt.execute();
conn.commit();