Лучший способ для пакетной вставки в Java / mysql? Вставить табличные значения (…), (…)? Или PreparedStatement.addBatch()

#java #mysql

#java #mysql

Вопрос:

Я пытаюсь реализовать пакетную вставку в базу данных mysql в моем Java-коде. Мои коллеги реализуют, используя

 insert table_a (col1, col2 ...) values (val1, val2 ...), (val12, val22)...
  

Я думаю использовать preparedStatement.addBatch() для каждой строки вставки, потому что первый способ приведет к сбою всех вставок, если одно значение неверно. Но мне интересно, не снизит ли это производительность. потому что кажется, что он запускает insert один за другим?

Заранее спасибо.

Комментарии:

1. Точный механизм того, как пакетная обработка будет работать под капотом, зависит от реализации драйвера JDBC — но каждая БД, которую я когда-либо использовал, показала улучшение производительности с его использованием! Если вы выполните несколько вставок по 10 тыс., используя отдельные инструкции вместо пакетной обработки, и присоедините профилировщик, я бы поспорил, что вы увидите заметно лучшую производительность от последнего! Просто дважды проверьте, что ваш драйвер поддерживает «частично завершенные» пакетные вставки. SUCCESS_NO_INFO может быть возвращен некоторыми, и вы остаетесь в подвешенном состоянии, что вынуждает вас выполнить откат ( docs.oracle.com/javase/7/docs/api/java/sql /… )

2. первый способ приведет к сбою всех вставок, если одно значение неверно … Я не могу говорить за ваш случай, но часто это предпочтительнее.