私は自分のテーブル(レガシーデータベース)の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>
より多くの情報が必要で見てみましょう:あなたは多対1 /多対多エンティティに1対多/を使用していますか? –
私の質問が更新されました。 – onigunn