Метод 1:
Java-код
Скопируйте код кода следующим образом:
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
pstmt=подключение
.prepareStatement("вставить в loadtest (id, data) значения (?, ?)");
for (int я = 1; я <= COUNT; я++) {
pstmt.clearParameters();
pstmt.setInt(1, я);
pstmt.setString(2, ДАННЫЕ);
пстмт.выполнить();
}
MyISAM: 246,6 секунды, InnoDB: 360,2 секунды.
Способ 2. Используйте транзакции без автоматической фиксации.
Java-код
Скопируйте код кода следующим образом:
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
conn.setAutoCommit(ложь);
pstmt=подключение
.prepareStatement("вставить в loadtest (id, data) значения (?, ?)");
for (int я = 1; я <= COUNT; я++) {
pstmt.clearParameters();
pstmt.setInt(1, я);
pstmt.setString(2, ДАННЫЕ);
пстмт.выполнить();
если (я % COMMIT_SIZE == 0) {
конн.коммит();
}
}
конн.коммит();
InnoDB: 31,5 секунды
Способ 3: выполнить пакет
Java-код
Скопируйте код кода следующим образом:
conn = DriverManager.getConnection(JDBC_URL
+ "?rewriteBatchedStatements=true", JDBC_USER, JDBC_PASS);
conn.setAutoCommit(ложь);
pstmt=подключение
.prepareStatement("вставить в loadtest (id, data) значения (?, ?)");
for (int i = 1; я <= COUNT; я += BATCH_SIZE) {
pstmt.clearBatch();
for (int j = 0; j <BATCH_SIZE; j++) {
pstmt.setInt(1, я + j);
pstmt.setString(2, ДАННЫЕ);
pstmt.addBatch();
}
pstmt.executeBatch();
if ((i + BATCH_SIZE - 1) % COMMIT_SIZE == 0) {
конн.коммит();
}
}
конн.коммит();
InnoDB: 5,2 секунды
Вышеупомянутое необходимо использовать
1) rewriteBatchedStatements=true
2) useServerPrepStmts=true
Метод 4: сначала ЗАГРУЗИТЬ, а затем ЗАВЕРШИТЬ
Java-код
Скопируйте код кода следующим образом:
conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASS);
conn.setAutoCommit(ложь);
pstmt = conn.prepareStatement("загрузить данные в локальный файл ''"
+ "в поля проверки загрузки таблицы, оканчивающиеся ','");
StringBuilder sb = новый StringBuilder();
for (int я = 1; я <= COUNT; я++) {
sb.append(i + "," + ДАННЫЕ + "/n");
если (я % COMMIT_SIZE == 0) {
InputStream = новый ByteArrayInputStream(sb.toString()
.getBytes());
((com.mysql.jdbc.Statement) пстмт)
.setLocalInfileInputStream(is);
пстмт.выполнить();
конн.коммит();
sb.setLength(0);
}
}
InputStream = новый ByteArrayInputStream(sb.toString().getBytes());
((com.mysql.jdbc.Statement) pstmt).setLocalInfileInputStream(is);
пстмт.выполнить();
конн.коммит();