4.4.7 加载对象的微调

本文提供了一系列针对Hibernate框架的性能优化策略,重点关注SQL查询效率与对象加载方式。通过调整配置如禁用外连接、设置延迟加载等手段减少数据库交互次数,从而提升应用性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于对象的加载,我们来看看还有哪些工作可以做:

1. 使你的SQL日志生效。通过阅读SQL日志,你可以评估你的关系模型的效率:一个join操作是否比两个select效率更高呢?索引的设置是否妥当?缓存的命中率是多少?取得你的DBA的帮助是一个好办法,因为只有她才能更加准确的评估那个方案是最佳的。

2. 通过用例来逐步的检查Hibernate执行的SQL。在web程序中,一个用例可能仅仅是一个页面或者一个对话框。这种方法同时也包括收集加载对象的方法。你的目标就是尽力减少每个用例所涉及的SQL查询。

3. 你可能会遇到两类问题:

A. 如果SQL中使用了join操作而导致性能下降的话,那么在<many-to-one>中把outer-join设为false。尝试调整hibernate.max_fetch_depth的值,但是请记住一般情况,这个值的最佳区间在14之间。

B. 如果过多的SQL被执行了,那么请把关于集合设置的lazy设置为true。默认情况下,Hibernate会对集合元素执行一个立即的查询。只有在极少数的情况下,你才能对于特定的结合设定outer-join设定为true,并且把lazy设置为false。请记住,对于每一个持久化类来说,只有一个集合属性能够被eager加载。

4. 当你设定了一个新的加载策略的时候,重新运行那些用例,观察SQL的执行情况。

5. 当你对做了所有的优化时候,重新审视它们之间是否会互相影响。

这些优化策略不仅仅对于默认的加载策略有效,你也可以在运行时用来调整HQL以及criteria查询。在第七章,我们来讨论运行时的加载。

在这部分,我们开始关注性能的方面,尤其是关联加载的方面。当然,最快速的方法就是从内存中的缓存取得对象,下一节中我们来讨论这个问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值