Hibernate性能调整

时间:2009-01-27 21:25:27

标签: sql performance hibernate jpa

根据您的经验,Hibernate的一些优秀性能调整是什么?我的意思是插入/更新和查询。

3 个答案:

答案 0 :(得分:5)

一些特定于Hibernate的性能调优技巧:

  • 避免由并行多对应的fetch-joins引起的连接重复(因此避免重复的对象实例化)
  • 使用延迟加载和fetch =“subselect”(防止N + 1选择问题)
  • 在巨大的只读结果集上,不要获取映射对象,而是获取平面DTO(使用Projections和AliasToBean-ResultTransformer)
  • 应用HQL批量更新,批量删除和逐个插入
  • 在适当的地方使用FlushMode.Never

取自http://arnosoftwaredev.blogspot.com/2011/01/hibernate-performance-tips.html

答案 1 :(得分:4)

我不确定这是一个调整,但如果你有一个你知道你需要的多对一,那么加入fetch会非常有用。例如,如果一个Person可以是一个部门的成员,并且你知道你将需要在一个特定的地方,你可以使用类似于Person p left join fetch p.department的东西,而Hibernate会做一个单独的查询对Person的一个查询,然后是Department的n个查询。

在进行大量插入/更新时,请定期调用flush而不是每次保存后或最后调用 - Hibernate将批处理这些语句并将它们一起发送到数据库,这将减少网络开销。

最后,请注意二级缓存。如果你知道id读取的大多数对象都在缓存中,它可以使事情变得非常快,但是如果指望它们存在但没有配置好,你最终会做很多事情。单行数据库查询,当您可以带回一个只有一个网络/数据库之旅的大型结果集时。

答案 2 :(得分:0)

适当地使用缓存,级联和延迟加载。

调整菜谱方案? Hibernate根据您提供的映射为您生成SQL。如果您不喜欢SQL,那么Hibernate可能不是正确的工具。

其余的性能与数据库设计有关:规范化,索引等。