我比較舊的方式和使用Hibernate之間的數據庫「更新」性能。休眠executeUpdate性能
這是我的數據庫結構:Document - > Code - > 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,INT ,int)「方法被調用850次來執行每個數據庫更新。
執行這些850的總時間更新舊的方式是:
954 milliseconds
與Hibernate來執行這些相同的850次更新的總時間爲:
1979 milliseconds
我打破了下來,發現在Hibernate版本中大部分時間都採用「query.executeUpdate()」 - > 954毫秒和「hibernateTransaction.commit()」 - > 750毫秒。
如何在執行大量更新時提高Hibernate性能?
因此,大部分區別是由於您的Hibernate版本在每次更新後提交事務而導致的,對吧? – axtavt 2012-04-11 17:39:17
是的。我注意到在Hibernate版本中,大部分時間都需要在每次更新時執行executeUpdate()和commit()。 – Marquinio 2012-04-11 17:40:48