Я сравниваю производительность базы данных «Обновление» между старым способом и с помощью Hibernate.Hibernate executeUpdate performance
Это моя структура базы данных: Документ -> Код -> Code_Details. Между родительскими таблицами и дочерними таблицами существует соотношение «один ко многим».
Теперь у меня есть около 850 записей Code_Details, которые мне нужно обновить в базе данных.
Ниже старый способ, который выполняет в два раза быстрее:
public void executeDBUpdate(int status1, int status2, int status3){
...
...
java.sql.Statement statement = connection.createStatement();
statement.executeUpdate("update Code_Details set status1="+status1+", status2"+=status2+", status3="+status3");
...
}
Ниже версия Hibernate:
public void executeDBUpdate(int status1, int status2, int status3){
...
...
Query query = session.createQuery("update Code_Details set status1=:status1, status2=:status2,status3=:status3);
query.setParameter("status", status_);
query.setParameter("status1",status1);
query.setParameter("status2",status2);
query.setParameter("status3",status3);
query.executeUpdate();
HibernateUtils.commitTransaction("emscribedx");
...
}
Пожалуйста, обратите внимание, что в обоих вариантах мой «executeDBUpdate (интермедиат, внутр , int) «метод вызывается 850 раз для выполнения каждого обновления базы данных.
Общее время для выполнения этих 850 обновляет старый способ:
954 milliseconds
Общее время для выполнения тех же 850 обновления с Hibernate является:
1979 milliseconds
я сломал его и заметил что большую часть времени в версии Hibernate занимает «query.executeUpdate()» -> 954 миллисекунды и «hibernateTransaction.commit()» -> 750 миллисекунд.
Как улучшить производительность Hibernate при выполнении большого количества обновлений?
Итак, большая часть разницы вызвана тем, что ваша версия Hibernate совершает транзакцию после каждого обновления, не так ли? – axtavt
есть. Я заметил, что в версии Hibernate большую часть времени занимает executeUpdate() и commit() для каждого обновления. – Marquinio