休眠@DynamicUpdate(值=真)@SelectBeforeUpdate(值=真)性能

2022-09-04 03:51:00

我开始在我的APP中使用这2个休眠注释。

@DynamicUpdate(value=true)
@SelectBeforeUpdate(value=true) 

首先,我将尝试解释我对它的理解,以了解我是否正确。

@DynamicUpdate(value=true)

仅更新实体中的modified valuesHibernate needs to track those changes

@SelectBeforeUpdate(value=true)

创建一个 before 以了解哪些属性已更改,这在实体已在不同会话上加载和更新时很有用selectupdateHibernate is out of tracking entity changes

这两个肯定是否正确?

我主要关心的是。

其中更好或更快一次更新实体中的所有字段DB performancegenerate a select to know which columns update and update only the modified columns?


答案 1

具体情况取决于您的情况。如果您的表非常简单(没有外键约束,只有几列,很少有索引),那么更新完整记录会更快。

但是,如果您的表具有许多外键约束和索引,则首先选择然后更新差异会更快。这是因为PostgreSQL必须为更新中的每个列执行以下工作:

  • 检查外键约束
  • 更新相关索引

此外,这些更改增加了必须通过真空清理的表的膨胀。

请记住,如果对具有许多表的数据库使用 dynamicUpdate,并且更新看起来非常不同,则将开始逐出缓存的查询计划。这些计划需要花费资源来计算新数据。但是,无论如何,缓存的计划可能只对同一会话中的后续查询有用。


答案 2

推荐