【问题标题】:Hibernate @DynamicUpdate休眠@DynamicUpdate
【发布时间】:2018-06-13 07:30:27
【问题描述】:

我们的系统中有一个名为“A”的表,它有大约 120 列(我知道该表未规范化,并且表规范化作为我们路线图中的积压项存在)。

目前,我们面临一个问题,即多个线程在更新同一个表行时会覆盖一些现有的更新列。我们的表实体上没有动态更新注释。

我正在考虑在表上添加该注释,因为这可以解决我们的问题,因为不同的线程在表的不同列上工作,并且如果在运行时生成 sql 仅更新这些列,那么它不会覆盖任何已完成的更新在不同线程的其他列上。

但我读到休眠缓存插入,更新所有列的表的 sql,以防动态更新不存在。

那么,在这里使用@DynamicUpdate 是否真正有益,或者在运行时生成动态 sql 的成本会导致性能下降?

有问题的表有数百万条记录,并且每隔一秒就会发生一次插入或更新(更新更频繁)。

【问题讨论】:

    标签: java mysql hibernate


    【解决方案1】:

    我一定会向你推荐@DynamicUpdate。让我解释一下原因:

    a) 数据库性能:通过减少要更新的列数,您可以减少数据库服务器开销来检查每列的引用完整性和约束(主键、外键、唯一键、非空等),并更新包含更新列的相应索引。

    b) 你只是在每次都重新构建缓存的查询计划进行权衡,但对于多线程环境,记住它不会有任何区别,因为缓存的查询计划仅在给定的会话寿命之前有效,因此仅对连续更新有用同一个数据库会话。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-09
      • 2011-12-16
      • 2021-10-21
      • 2015-02-08
      • 2019-04-18
      • 2017-02-06
      • 2017-05-18
      • 2017-09-19
      相关资源
      最近更新 更多