【java】itoo项目实战之大数据查询之使用 new map 优化hibernate之级联查询

     在我的上一篇博客《javaitoo项目实战之hibernate 懒加载优化性能》中,我曾提到过学生数据有2万条,查询数据十分的慢,这是让人很受不了的事情,看着页面进度条一直转着圈圈,那种着急的感觉真的没法形容。最开始考虑着使用lazy 来优化,因为前台框架的原因,lazy 优化并没有起到什么左右,后来就想着有select new map 优化。我先来画画关于查询学生的级联树


这个树的意思就是查询学生的时候它的深度是4级。

     在没有优化之前,使用的是hibernatehql 语句:From Student where isDelete =? 执行语句的时候,会发出467条语句打印到控制台上,打的满屏都是,看控制台的时候,看着就感觉头晕。

优化的时候,选择用selectnew map 进行优化,语句如下:

select newmap(S.id as id, S.name as name,S.comment as comment,S.remark asremark,S.accountAddress as accountAddress,S.code as code,S.email asemail,S.entranceDate as entranceDate,S.graduateSchool asgraduateSchool,S.identityCardID as identityCardID,S.classes.className asclassName,S.classes.institution.institutionName asinstitutionName,S.classes.institution.parentInstitution.institutionName asparentInstitution,S.classes.institution.schoolLevel.levelName aslevelName,S.classes.institution.id as institutionId,S.professional.professionalCodeas professionalCode) from  Student  S where S.isDelete =:isDelete


在打印语句的时候是1条。看控制台打印出来的结果还是挺舒服的。

但是他们的时间差如下:


从上表中可以看出,时间差得还是挺多的。在这里我有些事想不明白:


1.使用new map 查询的时候,虽然只打印一条语句,它需要进行全表扫描,查询的次数并不少,而hibernatehql 语句把每次查询的语句都打印出来了。但是它的查询时间相对new map来说,为什么会变长呢?

 

2.hibernatehql 语句级联查询时间过长的原因会不会跟hibernate的缓存有关系?每次查询结果都需要放到1,2级缓存中。

 

3.关于hibernate的查询语句这样设计的原因是什么,当初hibernate的大牛们设计的时候,是处于什么考虑的?

 

以上的三个问题我目前没有找到相关的资料来解答,如果哪位看到了,可以相互讨论一下.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弯_弯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值