繁体   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