Избыточные данные в операторах обновления

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 «неоптимизированного» и «оптимизированного» 'версия запроса идентична!

7
задан Beryllium 22 November 2013 в 20:58
поделиться