hibernate在查询oracle分区表效率慢

lovetimiforever 2017-10-13 10:09:57
hibernate在查询oracle分区表的时候效率很慢,有没有什么设置优化的方法,具体案例如下:
我有一张表 INVENTORY_LOG_BACKUP 按月份做了分区。数据大概在2千多万的样子。
我有一段简单的hibernate查询代码如下:
Query query = HibernateUtil.getCurrentSession().createSQLQuery(" select\n" +
" count(*) as y0_ \n" +
" from\n" +
" INVENTORY_LOG_BACKUP this_ \n" +
" where\n" +
" this_.CREATE_DATE>=:fromDate \n" +
" and this_.CREATE_DATE<=:toDate \n" +
" \n");
query.setParameter("fromDate",DateUtils.parseDate("20170701",DateUtils.YYYYMMDD));
query.setParameter("toDate",DateUtils.parseDate("20170720",DateUtils.YYYYMMDD));
BigDecimal cc = (BigDecimal) query.uniqueResult();

这段代码执行了68秒,才得到结果,

Query query = HibernateUtil.getCurrentSession().createSQLQuery(" select\n" +
" count(*) as y0_ \n" +
" from\n" +
" INVENTORY_LOG_BACKUP this_ \n" +
" where\n" +
" this_.CREATE_DATE>=to_date('20170701','yyyymmdd') \n" +
" and this_.CREATE_DATE<= to_date('20170720','yyyymmdd')\n" +
" \n");

BigDecimal cc = (BigDecimal) query.uniqueResult();
这段代码执行花费了 4秒就得到结果

Criteria criteria = HibernateUtil.getCurrentSession().createCriteria(InventoryLogBackUp.class);
criteria.add(Restrictions.ge(InventoryLog.COL_CREATE_DATE,DateUtils.parseDate("20170701",DateUtils.YYYYMMDD)));
criteria.add(Restrictions.le(InventoryLog.COL_CREATE_DATE,DateUtils.parseDate("20170720",DateUtils.YYYYMMDD)));

//获取总行数
Long count = (Long) criteria.setProjection(Projections.rowCount()).uniqueResult();

使用Criteria查询也消耗了60多秒时间。
用sql在数据库里面查询也只要几秒就得到结果了。hibernate在处理这样的查询上又什么特殊要注意的地方吗?
...全文
150 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

67,514

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧