Оптимизируется ли UPDATE, если значения полей на самом деле не меняются?

Например, пусть на самом деле изменяется значение только value2, а остальные значения такие же, какие сейчас в базе. Будет ли разница между следующими двумя запросами?
UPDATE table_name
SET column1 = value1, column2 = value2,  column3 = value3
WHERE condition;

UPDATE table_name
SET column2 = value2
WHERE condition;

Иногда лень отслеживать, какие из полей объекта на самом деле обновились, а какие нет, и учитывать это при формировании запроса к БД. Но наверняка обновление дорогостоящее, особенно для полнотекстовых индексов.
  • Вопрос задан
  • 271 просмотр
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
В postgresql создаётся физически новая версия строки при update (с обновлением всех индексов либо hot update если применимо) даже если ни одно поле не меняет своё действительное значение. Есть встроенный триггер suppress_redundant_updates_trigger, который можно повесить на таблицу, тогда ничего действительно не меняющий в данных update будет пропускаться.

Если меняется хотя бы одно значение - оптимизации не подлежит, должна быть записана новая версия строки в таблицу (чтобы MVCC обеспечить). Если возможно, оптимизация HOT update исключит сопутствующее обновление индексов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы