2015-04-30 3 views
3

Я пытаюсь вставить около 5000 значений в таблицу MySql с использованием Spring JDBC шаблон пакетного обновления, как показано здесьSpring обновление JdbcTemplate партия быстрая альтернатива

Как я понимаю, что это делает так много вставок сколько строк я даю в одной транзакции. Но он все еще медленный.

Я попытался формирования запроса, как

INSERT INTO CUSTOMER " + 
    "(CUST_ID, NAME, AGE) VALUES (?, ?, ?), (?, ?, ?), (?, ?, ?),(?, ?, ?).... 

на столько строк, у меня есть. Он выполнялся намного быстрее, но мне пришлось сформировать запрос вручную. Интересно, есть ли альтернативы для пакетного обновления для таких случаев?

P.S. Я знаю, что следует учитывать максимальный размер пакета, размер запроса не должен превышать лимит (хотя предел может быть настроен на сервере MySql) при построении таких больших запросов.

+0

ли вы испробовали 'preparedStatement.addBatch(); createdStatement.executeBatch(); '? – Xstian

+0

Да, никакого значимого влияния – lopushen

+0

Чтобы обновления пакета работали, убедитесь, что у вас есть версия драйвера JDBC (и база данных), которая ее поддерживает, если не будет выполняться одиночные запросы вместо пакета. Также убедитесь, что у вас есть правильная настройка транзакции и используются транзакционные таблицы. –

ответ

2

Вы можете сделать это следующим образом

  1. Получить объект соединения
  2. набор соединений Autocommit свойство ложно. используя connection.autocommit(false)
  3. Запустите инструкцию запроса вставки.
  4. выполнить connection.commit();
+0

Хороший вопрос! Это медленнее, чем формирование большого запроса, но, как оказалось, прикрепить операцию к приличной скорости. Благодаря! – lopushen

+0

При правильной настройке транзакции это не требуется, поскольку пружина tx уже делает это. Если это работает, это в основном свидетельствует о том, что у вас что-то не так в вашей настройке. –

+0

Глядя на образец, который является первым, у образца неправильная правильная настройка транзакции. Метод 'insertBatchSql' должен быть транзакционным, а это не так, если смотреть на образец, ему не хватает настройки транзакции. –

Смежные вопросы