Paratch Insert JDBC и запрос против отдельных вставки с Gernerated Key
-
27-10-2019 - |
Вопрос
It is implementation-defined as to whether getGeneratedKeys will return
generated values after invoking the executeBatch method.
(JDBC 4.0 Спецификация 2006, стр. 135).
У меня есть два варианта. Вставьте каждую строку отдельно и получите ключ. или сделайте пакетную вставку, а затем запросите ключи.
Чтобы избежать переодевания для запроса нескольких ключей, я мог бы использовать этот подход здесь. Анкет Например, подготовленные заявления с разными размерами. А затем разбил мой «партийный запрос» в наименьшее возможное заявление.
Какой более быстрый метод?
Решение
Это зависит.
У меня нет чисел, независимо от того, executeBatch()
на самом деле быстрее, чем использование PreparedStatement
неоднократно, так что мое предложение таково:
Попробуйте, будется ли
getGeneratedKeys()
Работает на вашего драйвера JDBC. Если это не сработает, пакетные вставки в любом случае не будут работать для вас.Напишите тестовый пример для обоих и измерьте производительность. Это дает вам реальные данные, чтобы основать ваше решение. Все остальное - это просто догадки (и неверно 90% случаев).
РЕДАКТИРОВАТЬ Если вы хотите сохранить свое приложение DB Agnostic, добавьте тест в свое приложение и запустите его в таблице Temp/Test. Если тест преуспевает, выбрали реализацию, которая использует пакетные обновления, в противном случае возвращается к грубой силе.