2012-04-11 13 views
0

私は古い方法とHibernateを使ってデータベースの "更新"パフォーマンスを比較しています。Hibernate executeUpdate performance

これは私のデータベース構造です:ドキュメント - >コード - > Code_Details。親テーブルと子テーブルの間には1対多の関係があります。

私はデータベースで更新する必要がある約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 

休止状態で、同じ850回の更新を実行するための合計時間は次のとおりです。

1979 milliseconds 

私はそれを壊したと注目Hibernateバージョンのほとんどは "query.executeUpdate()" - > 954ミリ秒と "hibernateTransaction.commit()" - > 750ミリ秒を取っていることに注意してください。

多くのアップデートを実行する際に、Hibernateのパフォーマンスを向上させる方法を教えてください。

+0

その違いの大部分は、Hibernateのバージョンが各更新後にトランザクションをコミットするという事実に起因します。 – axtavt

+0

はい。私は、Hibernateのバージョンでは、ほとんどの場合、各更新に対してexecuteUpdate()とcommit()が必要であることに気付きました。 – Marquinio

答えて

0

申し訳ありません。同じトランザクション内で「query.executeUpdate()」を850回呼び出すと、実際に処理時間が短縮されました。 したがって、基本的に "query.executeUpdate()"は850回呼び出されますが、session.commit()は1回だけ呼び出されます。