簡體   English   中英

Hibernate,DB2-運行緩慢的查詢

[英]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代碼關聯起來,從而使調試變得更加容易。

看看這篇文章http://www.ibm.com/developerworks/data/library/techarticle/dm-1008hibernateibatispurequery1/index.html

我想看看數據庫日志,以檢查執行的確切SQL指令是什么。 Hibernate可能加載的不僅是您期望的本機查詢,因為它可能加載急切的集合等。

因此-啟用Hibernate查詢日志記錄,或者更好的是,檢查數據庫日志以查看執行了什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM