gpt4 book ai didi

java - Hibernate @DynamicUpdate(value=true) @SelectBeforeUpdate(value=true) 性能

转载 作者:搜寻专家 更新时间:2023-10-30 20:01:36 24 4
gpt4 key购买 nike

我开始在我的应用程序中使用这 2 个 hibernate 注释。

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

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

@DynamicUpdate(value=true)

仅更新实体中的修改值 Hibernate 需要跟踪这些更改

@SelectBeforeUpdate(value=true)

update 之前创建一个 select 以了解哪些属性已更改,这在实体已在不同 session 上加载和更新时很有用 Hibernate 已退出跟踪实体变化

这 2 个确认是否正确?

我主要担心的是。

DB performance 中哪个更好或更快 一次更新实体中的所有字段生成一个选择以了解哪些列更新和仅更新修改列?

最佳答案

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

但是,如果您的表有很多外键约束和索引,那么先选择然后更新差异会更快。这是因为 PostgreSQL 必须为更新中的每一列做以下工作:

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

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

请记住,如果您在包含许多表的数据库上使用 dynamicUpdate,并且您的更新看起来非常不同,您将开始逐出缓存的查询计划。这些计划会花费资源来计算新鲜度。不过,无论如何,缓存的计划可能只对同一 session 中的后续查询有用。

关于java - Hibernate @DynamicUpdate(value=true) @SelectBeforeUpdate(value=true) 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21233853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com