Java 在spring/hibernate应用程序中提高本机sql查询的性能?

Java 在spring/hibernate应用程序中提高本机sql查询的性能?,java,sql,oracle,spring,hibernate,Java,Sql,Oracle,Spring,Hibernate,下面是本机sql查询。我正在使用Oracle数据库 select * from (select row_.*, rownum rownumber from (select colmn1, colmn2, colmn3,

下面是本机sql查询。我正在使用Oracle数据库

select
         * 
     from
         (select
             row_.*,
             rownum rownumber 
         from
             (select
                 colmn1,
                 colmn2,
                 colmn3,
                 colmn4,
                 colmn5,
                 colmn6,
                 from
                 Table5
             where
                 colmn5 In (
                    '19901','10001'
                 ) 
             order by
                colmn1 ) row_ ) 
         Where
             Rownumber <= 50000
             and rownumber > 0
上面的查询返回50000条记录。如果我在sqldeveloper中执行上述查询,只需30秒,但在spring和hibernate集成应用程序中需要15分钟。如何提高性能


谢谢

您有两个内部选择。内部选择总是可能导致性能差,因为它可能会妨碍数据库找到最佳搜索策略

据我所知,您只使用内部选择来处理行号。如果您在java/hibernate级别上只使用最内部的select和handle来处理行号,那么您将获得更好的性能

您只能使用此选项

select colmn1, colmn2, colmn3, colmn4, colmn5, colmn6,
   from Table5
   where colmn5 In ('19901','10001') 
   order by colmn1
由于它没有任何数据库特性,因此更容易被HQL语句替换,因此使您的程序独立于所使用的数据库Java类和属性名称,应该用真实名称替换:

from Table5_Class
   where colmn5_Prop in ('19901','10001') 
   order by colmn1_prop
然后用hibernate方法Query.setMaxResults50000和Query.setFirstResult0替换where条件where Rownumber 0备注:setFirstResult0是多余的,因为第0行始终是第一行,但我猜您也希望获得接下来的50000行,然后可以使用setFirstResultn

如果您需要rownumber作为参数,那么可以使用结果列表的索引进行此操作


附言:我无法告诉你为什么在SQL developer中选择比在Hibernate中快得多。

请发布一些代码片段?