方法 1:
Javaコード
次のようにコードをコピーします。
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
pstmt=コン
.prepareStatement("loadtest (id, data) 値 (?, ?) に挿入");
for (int i = 1; i <= COUNT; i++) {
pstmt.clearParameters();
pstmt.setInt(1, i);
pstmt.setString(2, DATA);
pstmt.execute();
}
MyISAM: 246.6 秒、InnoDB: 360.2 秒
方法 2: 自動コミットなしでトランザクションを使用する
Javaコード
次のようにコードをコピーします。
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
conn.setAutoCommit(false);
pstmt=コン
.prepareStatement("loadtest (id, data) 値 (?, ?) に挿入");
for (int i = 1; i <= COUNT; i++) {
pstmt.clearParameters();
pstmt.setInt(1, i);
pstmt.setString(2, DATA);
pstmt.execute();
if (i % COMMIT_SIZE == 0) {
conn.commit();
}
}
conn.commit();
InnoDB: 31.5秒
方法 3: バッチを実行する
Javaコード
次のようにコードをコピーします。
conn = DriverManager.getConnection(JDBC_URL
+ "?rewriteBatchedStatements=true"、JDBC_USER、JDBC_PASS);
conn.setAutoCommit(false);
pstmt=コン
.prepareStatement("loadtest (id, data) 値 (?, ?) に挿入");
for (int i = 1; i <= COUNT; i += BATCH_SIZE) {
pstmt.clearBatch();
for (int j = 0; j < BATCH_SIZE; j++) {
pstmt.setInt(1, i + j);
pstmt.setString(2, DATA);
pstmt.addBatch();
}
pstmt.executeBatch();
if ((i + BATCH_SIZE - 1) % COMMIT_SIZE == 0) {
conn.commit();
}
}
conn.commit();
InnoDB: 5.2秒
上記を使用する必要があります
1) rewriteBatchedStatements=true
2) useServerPrepStmts=true
方法 4: 最初に LOAD してから COMMIT
Javaコード
次のようにコードをコピーします。
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
conn.setAutoCommit(false);
pstmt = conn.prepareStatement("データのローカル infile をロードします '' "
+ "「,」で終わるテーブルのロードテストフィールドに");
StringBuilder sb = 新しい StringBuilder();
for (int i = 1; i <= COUNT; i++) {
sb.append(i + "," + DATA + "/n");
if (i % COMMIT_SIZE == 0) {
InputStream は = new ByteArrayInputStream(sb.toString()
.getBytes());
((com.mysql.jdbc.Statement) pstmt)
.setLocalInfileInputStream(is);
pstmt.execute();
conn.commit();
sb.setLength(0);
}
}
InputStream は = new ByteArrayInputStream(sb.toString().getBytes());
((com.mysql.jdbc.Statement) pstmt).setLocalInfileInputStream(is);
pstmt.execute();
conn.commit();