Пакетная вставка JDBC МЕДЛЕННА!Я имею в виду, действительно медленный? - PullRequest
8 голосов
/ 01 сентября 2011

Вот сделка:

  1. Я создаю соединение conn, используя DriverManager
  2. Я устанавливаю conn.autoCommit(false);
  3. Тогда у меня есть PreparedStatement pStat = conn.prepareStatement(insert_string_with_parameter);
  4. Я устанавливаю несколько параметров с помощью pStat.set ... затем я добавляю пакет с pStat.addBatch();
  5. Каждые 10000 строк (я звоню addBatch() 10000 раз), я звоню pStat.executeBatch();
  6. Не уверен, если нужно, но я звоню также pStat.clearBatch() сразу после

Даже если все вышеперечисленное звучит хорошо для меня, это МЕДЛЕННО !!! .

У меня в среднем всего 35 записей (всего 8 столбцов, только технический первичный ключ с автоинкрементом и некоторые ненулевые ограничения) в секунду.Я рассчитываю, что мне понадобится неделя, чтобы вставить все мои 20-миллиметровые строки ...

Я что-то не так делаю?

Сколько строк я должен попытаться добавить в каждом цикле обработки пакета?10000 слишком много?

1 Ответ

1 голос
/ 01 сентября 2011

Если вы используете MySQL с драйвером JDBC версии 5.1.7, вы можете быть подвержены ошибке, которая замедляет пакетную вставку .Обновление до 5.1.10 или более поздней версии должно позаботиться об этом.

...