500.000 строк в настоящее время не так много для базы данных.
Я думаю, что вы должны, прежде всего, оптимизировать доступ к БД, и если у вас нет желаемой производительности, используйте более продвинутые методы.
Вы заявили о Java, на ум приходит 2 оптимизации:
- Используйте Подготовленное утверждение, а не Заявление из JDBC (или, если вы используете какую-либо абстракцию поверх JDBC, убедитесь, что это так и есть). Это позволит БД не повторять запрос каждый раз
Использовать пакетные операции. Там один только увеличит скорость на порядок или около того в зависимости от вашей настройки RDBMS:
PreparedStatement pstmt = connection.prepareStatement(<YOUR_INSERT_SQL>);
for(...) { // chose batch size like 500 to 2000
pstmt.setXXX(<bind the parameters here>)
pstmt.addBatch(); // add to the batch
}
pstmt.executeBatch(); // does bunch of inserts at once
Выполнение всех этих операций может занять меньше минуты, или 1-2 минуты, но не, скажем, часов (конечно, в зависимости от того, куда вы вставляете данные и от качества сети, но обычно это так) .
Если этого недостаточно, вы можете использовать параллельный доступ, используя несколько соединений одновременно. Но опять же, если бы это была одноразовая операция, я бы не стал беспокоиться, в конце концов, вам понадобится больше времени для написания этого многопоточного кода, чем разница в производительности, которую вы получите:)