介绍一种性能极差的HQL写法,帮忙分析下原因

后果:

查询时,10000条记录要7分钟!

关联关系:
[code] public class TrailRecord {
Long id,
Knowledge knowledge,
Date borwseTime
}

public class TrailSession {
Long id,
User user,
}
[/code]
查询HQL代码:
[code] getHibernateTemplate().setMaxResults(amount);
String hql = "select r.knowledge from TrailRecord r where r.browseTime in (select max(t.browseTime) as btime from TrailRecord t where t.trailSession.user=? and t.knowledge.deleted=false group by t.knowledge) order by r.browseTime desc";
return getHibernateTemplate().find(hql, new Object[]{user});[/code]


生成的SQL:
[code]select knowledge1_.N_BH as N1_0_,
knowledge1_.B_Deleted as B2_0_,
knowledge1_.C_Content as C3_0_,
knowledge1_.D_CreateDate as D4_0_,
knowledge1_.N_Type as N15_0_
from T_TrailRecord trailrecor0_
inner join T_Knowledge knowledge1_ on trailrecor0_.N_Knowledge =
knowledge1_.N_BH
where trailrecor0_.D_BrowseTime in
(select max(trailrecor2_.D_BrowseTime)
from T_TrailRecord trailrecor2_,
T_TrailSession trailsessi3_,
T_Knowledge knowledge4_
where trailrecor2_.N_TrailSession = trailsessi3_.N_BH
and trailrecor2_.N_Knowledge = knowledge4_.N_BH
and trailsessi3_.N_User = 1
and knowledge4_.B_Deleted = 0
group by trailrecor2_.N_Knowledge)
order by trailrecor0_.D_BrowseTime desc limit 11[/code]

问题已经解决了,但是还是没有完全弄明白生成的SQL为什么这么慢。请帮忙分析下。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值