2010-12-07 12 views
2

私は自分のテーブル(レガシーデータベース)の1つを検索し、ここで恐ろしい時間を受け取っています。問合せは、例えば、休止状態の基準APIで構築:Hibernate、DB2 - 遅いクエリ

Criteria crit = getSessionFactory().getCurrentSession().createCriteria(P1.class); 
crit.add(Restrictions.sqlRestriction("{alias}.compno like ?", "%" + s + "%", new StringType())); 
crit.setMaxResults(25); 
crit.setFirstResult(0); 
crit.addOrder(Order.asc("compno")); 
crit.list(); 

あなたは、私はすでにもパフォーマンスを向上させるために、ここでページングをやっている見ることができるようです。この基準には平均で~6 secondsが必要です。この

select * from SCHEM.P1 where compno like '%100%' order by compno fetch first 25 rows only 

のように見えます

まあネイティブクエリでは、唯一の芋大きな違いがある10 msかかります。なぜ基準が遅いのですか?ネイティブのSQLクエリに戻る必要がありますか?コメントの

良い点:

はい、私はスコープに持っていたしませんでしたいくつかの関係があります。

<set name="pI" table="P12" lazy="false"> 
    <key column="awcompno" update="false" /> 
    <one-to-many class="org.gee.hibernate.P12" not-found="ignore"/> 
</set> 
<one-to-one name="info" class="org.gee.hibernate.P13" /> 

<set name="ma" table="P03" lazy="true" schema="SCHEMP" mutable="false" > 
    <key column="macountry" property-ref="land" update="false" /> 
    <one-to-many class="org.gee.hibernate.P03" not-found="ignore" /> 
</set> 


<set name="users" table="P15" lazy="true"> 
    <key column="apcompno" update="false" /> 
    <one-to-many class="org.gee.hibernate.P15" not-found="ignore"/> 
</set> 
+0

より多くの情報が必要で見てみましょう:あなたは多対1 /多対多エンティティに1対多/を使用していますか? –

+0

私の質問が更新されました。 – onigunn

答えて

3

私の先端は次のとおりです。

<set name="pI" table="P12" lazy="false"> 
    <key column="awcompno" update="false" /> 
    <one-to-many class="org.gee.hibernate.P12" not-found="ignore"/> 
</set> 

このコレクションは怠け者ではありません。それはあなたのボトルネックかもしれません。

すべての情報が必要ですか? IDだけを読みたい場合は、休止状態でエンティティのフィールドを読むことができます。

+0

はい、あなたはここにいます。この関係を削除すると、クエリ時間が遅くなります。このように私にヒントをくれてありがとう! – onigunn

0

は、私が言うと思いますが何をチェックするDBのログを見てきました実行される正確なSQL命令です。 Hibernateは、あなたが期待するネイティブクエリー以上のものをロードするかもしれません。

したがって、Hibernateクエリーログを有効にするか、より良いことに、何が実行されるのかを確認することをお勧めします。

1

IBM pureQueryには、DB2で動作するHibernateアプリケーションを高速化するための素晴らしい機能があります。もう1つの利点は、SQLとJavaコードを関連付けることができるため、デバッグが非常に簡単になります。

この記事 http://www.ibm.com/developerworks/data/library/techarticle/dm-1008hibernateibatispurequery1/index.html

+0

良いヒント!それを知らない、共有のおかげで – onigunn