Hibernate @DynamicUpdate(value=true) @SelectBeforeUpdate (value=true) производительность

я начинаю использовать эти аннотации 2 hibernate в моем приложении.

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

сначала я попытаюсь объяснить, что я понимаю об этом, чтобы знать, прав ли я об этом.

@DynamicUpdate(value=true)

обновление modified values в лице Hibernate needs to track those changes

@SelectBeforeUpdate(value=true)

создает select до update чтобы узнать, какие свойства были изменены, это полезно, когда сущность была загружена и обновлена на разных сеансах Hibernate is out of tracking entity changes

это 2 утверждения верны?

моя главная забота.

на DB performance что лучше или быстрее обновляет все поля в сущности сразу или generate a select to know which columns update and update only the modified columns?

1 ответов


ситуация зависит от ваших обстоятельств. Если ваша таблица очень проста (не имеет ограничений внешнего ключа, только несколько столбцов, несколько индексов), то обновление полной записи будет быстрее.

Если, однако, ваша таблица имеет много ограничений и индексов внешнего ключа, будет быстрее сначала выбрать, а затем обновить различия. Это связано с тем, что PostgreSQL должен выполнить следующую работу для каждого столбца в обновлении:

  • проверить внешний ключ ограничение
  • обновить связанные индексы

кроме того, изменения добавляют раздувание к таблицам, которые должны быть очищены вакуумом.

имейте в виду, что если вы используете dynamicUpdate в базе данных со многими таблицами, и ваши обновления выглядят совсем по-другому, вы начнете вытеснять кэшированные планы запросов. Эти планы стоят ресурсов, чтобы вычислить свежие. Однако кэшированные планы могут быть полезны только для последующих запросов в том же сеансе.