Вы можете использовать пакетные вставки JDBC.
PreparedStatement ps = cn.prepareStatement("INSERT INTO....");
for (int i = 0; i < 1000; i++) {
ps.setString(1, "value-" + i); // Set values
ps.addBatch(); // Add this to the batch
ps.clearParameters(); // Reset the parameters
}
ps.executeBatch();
Однако MySQL изначально не поддерживает функцию пакетной вставки, поэтому для достижения разумной производительности вам необходимо добавить rewriteBatchedStatements=true
в конфигурацию mysql jdbc.
Существует также специальный синтаксис пакетной вставки MySQL, который можно использовать, если вы хотите создать большую строку SQL.Я бы попробовал оба и проверил производительность.
INSERT INTO x (a,b)
VALUES ('1', 'one'),
('2', 'two'),
('3', 'three');
Будьте осторожны с обоими подходами, так как вы можете превысить максимальный размер пакета для одного запроса.Вам может потребоваться установить размер пакета, который отличается от количества записей в буфере.Например, вам может понадобиться разделить 1000 записей на 10 пакетов по 100.