对于对象的加载,我们来看看还有哪些工作可以做:
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的值,但是请记住一般情况,这个值的最佳区间在1和4之间。
B. 如果过多的SQL被执行了,那么请把关于集合设置的lazy设置为true。默认情况下,Hibernate会对集合元素执行一个立即的查询。只有在极少数的情况下,你才能对于特定的结合设定outer-join设定为true,并且把lazy设置为false。请记住,对于每一个持久化类来说,只有一个集合属性能够被eager加载。
4. 当你设定了一个新的加载策略的时候,重新运行那些用例,观察SQL的执行情况。
5. 当你对做了所有的优化时候,重新审视它们之间是否会互相影响。
这些优化策略不仅仅对于默认的加载策略有效,你也可以在运行时用来调整HQL以及criteria查询。在第七章,我们来讨论运行时的加载。
在这部分,我们开始关注性能的方面,尤其是关联加载的方面。当然,最快速的方法就是从内存中的缓存取得对象,下一节中我们来讨论这个问题