Hibernate: динамическое обновление dynamic-insert - Эффекты производительности - PullRequest
20 голосов
/ 04 августа 2010

Использование динамического обновления или динамической вставки имеет положительное значение, хотя, как правило, незначительно только для производительности, как также указано в 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:

Хотя в некоторых случаях эти настройки могут повысить производительность, в других они могут фактически снизить производительность.

Может кто-нибудь предложить пример/ сценарий с упоминанием того же негативного влияния на производительность?

Ответы [ 3 ]

48 голосов
/ 04 августа 2010

Hibernate кэширует фактические строки SQL INSERT / SELECT / UPDATE для каждой сущности, и очевидным преимуществом является то, что ему не нужно вычислять SQL, когда вы хотите сохранить, найти или обновить сущность.

Однако при использовании динамической вставки или динамического обновления Hibernate должен каждый раз генерировать соответствующую строку SQL, и, таким образом, на стороне Hibernate снижается производительность.

Другими словами, существует компромисс между накладными расходами на стороне базы данных и на стороне Hibernate.

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

Смотри также

6 голосов
/ 09 декабря 2011

Я думаю, что многие индексы также замедляют обновления и вставки, поэтому, кроме больших столбцов, динамическое обновление должно быть хорошо для таблиц с большой шириной / содержанием в строке и многими индексами.Знаете, в «реальной жизни» базы данных не всегда имеют маленькие нормализованные таблицы ...

Перестройка индексов для больших таблиц может занять гораздо больше времени, чем затраты на создание и анализ SQL-запросов.

1 голос
/ 05 марта 2015

Другая причина - при обновлении ранее отсоединенного объекта. Для этого сначала необходимо извлечь запись из базы данных, поскольку отсоединенный объект отсутствует в кэше сеанса. Следовательно, динамическое обновление в этом случае требует дополнительного обхода для выполнения начальной выборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...