休眠:动态更新动态插入 - 性能效果

2022-09-01 15:11:18

使用动态更新或动态插入具有积极意义,尽管通常仅在性能方面略有影响,正如 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 中所述:

虽然这些设置在某些情况下可以提高性能,但它们实际上会降低其他情况下的性能。

任何人都可以提出一些例子/场景,提到同样的负面影响性能吗?


答案 1

Hibernate为每个实体缓存实际的 INSERT/SELECT/UPDATE SQL 字符串,其明显的好处是,当您想要持久化、查找或更新实体时,它不必计算 SQL。

但是,当使用动态插入或动态更新时,Hibernate 每次都必须生成相应的 SQL 字符串,因此在 Hibernate 端存在性能开销。

换句话说,在数据库端和休眠端的开销之间需要权衡。

我的观点是,对于具有胖 blob 列的表或具有大量列的表,动态插入和动态更新可能很有趣。在其他情况下,我不相信动态插入或更新总是意味着性能提升(默认情况下我不使用它们)。但与往常一样,您应该对其进行测量。

另请参见


答案 2

我认为许多索引也会减慢更新和插入的速度,因此,除了大列之外,动态更新应该适用于每行具有较大宽度/内容和许多索引的表。你知道,在“现实生活”中,数据库并不总是有小的、规范化的表......

在大型表上重新生成索引可能需要比创建和分析 SQL 查询的开销更长的时间。


推荐