#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. первый способ приведет к сбою всех вставок, если одно значение неверно … Я не могу говорить за ваш случай, но часто это предпочтительнее.