Hibernate генерирует операторы UPDATE
, которые включать все столбцы, независимо от того, меняю ли я значение в этих столбцах, например:
tx.begin();
Item i = em.find(Item.class, 12345);
i.setA("a-value");
tx.commit();
выдает этот оператор UPDATE
:
update Item set A = $1, B = $2, C = $3, D = $4 where id = $5
поэтому столбцы B, C, D обновляются, а я этого не делал » не менять их.
Скажем, элементы часто обновляются, и все столбцы индексируются. Вопрос: имеет ли смысл оптимизировать часть Hibernate примерно так:
tx.begin();
em.createQuery("update Item i set i.a = :a where i.id = :id")
.setParameter("a", "a-value")
.setParameter("id", 12345)
.executeUpdate();
tx.commit();
Что меня больше всего смущает, так это то, что планы EXPLAIN
«неоптимизированного» и «оптимизированного» 'версия запроса идентична!