hibernate 中 query.list()的优化

2018年3月15日  今天做项目遇到一个需求,问题是在调用query.list()的时候,因为数据也多大概700条左右,查询一次需要30s+,这简直是不能忍,于是开始考虑怎么优化。

1.因为是单表查询,不涉及表间的复杂关联,所以想到的是可能是没加索引吧,那我就加上索引,重新启动项目查询,没有改变。

2.有人说是session连接没有释放,也就是session.colse(),对我这不适用。也有人说这是数据库连接过多了吧,自己的连接池太小了,那我就从500变成5000,依旧没变化。

3.问题还没有解决,有人说query.list()转化成对应的对象的list的时候可能因为对象(model)的属性太多导致的,那好,我把所有的没用的属性都删掉,留下大概7-8个左右属性,继续执行,依然如故···

4. 有人又说了 ---对于大数据量,使用qry.scroll()可以得到较好的处理速度以及性能。而且直接对结果集向前向后滚动。-------我怎么觉得这样反而降低了效率。

5.数据分页,既然数据这么多那咱们分页查询吧,于是我每页50条,查出所有数据。性能有所提升大概20s+。

后来依然没有解决问题,心想算了吧,明天再解决,突然想着,这么多条数据为什么非要一次性都取到呢?需求不合理啊····所以分页应该是最好的解决办法,想要下次再取,而且一次取得那么多数据也不合理。

2018年3月16日 

唉,终于找到慢的原因了query.list() 执行效率相当的慢,我用的框架是Spring MVC + hibernate ,可能内部hibernate框架在转换list时候浪费时间了,我自己改变变成返回结果集,然后自己在拼装成list<Object> 效率提升约70倍

下面直接写出我之前的代码

public List<CategoryBean> getInstrumentClassRootSeedData(int i, int sizePage){
        String hql = "select bean from CategoryBean bean  where  bean.levelcol = 2 ";
        Query query = getSession().createQuery(hql);
        query.setFirstResult(i);
        query.setMaxResults(sizePage);
        return  query.list();
    }

改进后的代码

    public List<CategoryBean> getInstrumentClassRootSeedData(){
        ScrollableResults srs=null;
        List<CategoryBean> list = new ArrayList<CategoryBean>();
        String hql = "select b.recid,b.objectid,b.stdcode,b.stdname,b.resid,b.parents"
                + " from CategoryBean b  where  b.levelcol = 2 order by b.stdcode";
        Query query = getSession().createQuery(hql);
        srs = query.scroll();
        while(srs.next()){
            CategoryBean categoryBean=new CategoryBean();
            categoryBean.setRecid(srs.getString(0));
            categoryBean.setObjectid(srs.getString(1));
            categoryBean.setStdcode(srs.getString(2));
            categoryBean.setStdname(srs.getString(3));
            categoryBean.setResid(srs.getString(4));
            categoryBean.setParents(srs.getString(5));
            list.add(categoryBean);
         }
        return  list;
    }

就这样,彻底提升了效率,不过还是有疑问,query.list()到底做了什么?才会这么慢··· 

转载于:https://www.cnblogs.com/ScarecrowAnBird/p/8578795.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值