[英]Hibernate, DB2 - Slow running queries
我正在對我的一張桌子(舊版數據庫)進行搜索,並在這里收到了可怕的時間。 該查詢由休眠的條件api構建,例如:
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
,這與imo有着巨大的差異。 為什么標准運行如此緩慢? 我需要切換回本機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>
我的提示是:
<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,則可以使用hibernate讀取實體的字段。
IBM pureQuery具有一些非常好的工具,可以加速與DB2一起使用的Hibernate應用程序。 另一個好處是……它使您可以將SQL和Java代碼關聯起來,從而使調試變得更加容易。
我想看看數據庫日志,以檢查執行的確切SQL指令是什么。 Hibernate可能加載的不僅是您期望的本機查詢,因為它可能加載急切的集合等。
因此-啟用Hibernate查詢日志記錄,或者更好的是,檢查數據庫日志以查看執行了什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.