Пакетная вставка и запрос JDBC против одиночных вставок с Gernerated ключом - PullRequest
2 голосов
/ 14 июня 2011

Я хочу вставить много строк в таблицу, которая автоматически генерирует ключи. JDBC не гарантирует, что получение сгенерированных ключей будет работать при пакетном обновлении.

It is implementation-defined as to whether getGeneratedKeys will return generated values after invoking the executeBatch method. (спецификация JDBC 4.0 2006, стр. 135).

У меня есть два варианта. Вставьте каждую строку отдельно и получите ключ. Или выполните пакетную вставку, а затем запросите ключи.

Чтобы избежать обхода при запросе нескольких клавиш, я мог бы использовать этот подход здесь . Имея, например, 5 подготовленных заявлений с разными размерами. А затем разбить мой «пакетный запрос» на наименьшее возможное утверждение.

Какой метод быстрее?

1 Ответ

1 голос
/ 14 июня 2011

Это зависит.

У меня нет цифр, действительно ли executeBatch() быстрее, чем повторное использование PreparedStatement, поэтому я предлагаю следующее:

  1. ПопробуйтеgetGeneratedKeys() работает для вашего драйвера JDBC.Если это не сработает, пакетные вставки у вас все равно не сработают.

  2. Напишите контрольный пример для обоих случаев и измерьте производительность.Это дает вам реальные данные для принятия решения.Все остальное - только догадки (и неправильные 90% времени).

[EDIT] Если вы хотите сохранить независимость от базы данных своего приложения, добавьте тест вваше приложение и запустить его на временную / тестовую таблицу.Если тест пройден успешно, выберите реализацию, которая использует пакетные обновления, в противном случае используйте грубую силу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...