Hibernate:动态更新动态插入 – 性能效果
使用动态更新或动态插入具有积极的作用,但通常仅略微提高性能,如http://www.mkyong.com/hibernate/hibernate-dynamic-update-attribute-example/所述。
但是参考文档提到这可能会产生负面的性能影响,如http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-class中所述 :
虽然这些设置可以在某些情况下提高性能,但实际上可能会降低其他设置的性能。
任何人都可以建议一些示例/场景提到相同的负面性能影响吗?
Hibernate为每个实体缓存实际的INSERT / SELECT / UPDATE SQL字符串,显而易见的好处是,当您想要持久化,查找或更新实体时,它不必计算SQL。
但是,当使用动态插入或动态更新时,Hibernate每次都必须生成相应的SQL字符串,因此Hibernate方面会产生性能成本。
换句话说,在数据库端和Hibernate端的开销之间存在权衡。
我的观点是动态插入和动态更新对于具有胖blob列的表或具有大量列的表可能是有趣的。 在其他情况下,我不相信动态插入或更新总是意味着性能提升(我默认不使用它们)。 但一如既往,你应该衡量它。
也可以看看
- Re:请求动态更新-SQL以获取来自Hibernate开发人员的一些反馈
我认为许多索引也会降低更新和插入速度,因此,除了大型列之外,动态更新应该适用于每行具有较大宽度/内容和多个索引的表。 你知道,在“现实生活”中,数据库并不总是带有规范化的小表……
重建大型表的索引可能比创建和解析SQL查询的开销要长得多。
另一个原因是更新以前分离的对象时。 为了使其工作,首先需要从db中获取记录,因为分离的对象不在会话高速缓存中。 因此,在这种情况下的动态更新需要额外的往返来执行初始提取。
- 如何使用Hibernate Validator动态解析消息参数?
- @BatchSize但在@ManyToOne案例中有很多往返
- 如何使用Hibernate eqOrIsNull()
- Java JPA GenerationType.Auto值始终为null
- 如何配置maven hbm2hbmxml和hbm2java在mvn clean install中依次运行
- jpa 2 hibernate limit(最大结果)到CriteriaQuery
- 抢先并优雅地检查org.hibernate.Session是否仍然连接(通过c3p0)
- 了解Hibernate中的mappedBy注释
- 如何实现与hibernate相等而不会失去对称属性的风险?