[英]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.