1

データベースの「更新」のパフォーマンスを、古い方法と Hibernate を使用して比較しています。

これは私のデータベース構造です: Document -> Code -> Code_Details. 親テーブルと子テーブルの間には 1 対多の関係があります。

現在、データベースで更新する必要がある約 850 の Code_Details エントリがあります。

以下は従来の方法で、パフォーマンスが 2 倍高速です。

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");

...
}

以下は休止状態のバージョンです。

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 のパフォーマンスを向上させるにはどうすればよいですか?

4

1 に答える 1

0

了解しました。同じトランザクション内で「query.executeUpdate()」を850回呼び出しているので、処理時間が大幅に短縮されました。したがって、基本的に「query.executeUpdate()」は850回呼び出されますが、session.commit()は1回だけ呼び出されます。

于 2012-04-12T00:19:35.830 に答える