Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад

Как поле updated_at может ломать HOT update?

Вопрос проверяет понимание механизма HOT update в PostgreSQL и того, как изменение поля updated_at может препятствовать его применению.

Короткий ответ

HOT update (Heap-Only Tuple) позволяет PostgreSQL обновлять строки без изменения индексов, если обновляемые столбцы не входят ни в один индекс. Если поле updated_at индексировано, то при каждом его изменении PostgreSQL вынужден обновлять соответствующий индекс, что делает HOT update невозможным. Это приводит к увеличению числа операций записи в индексы и фрагментации таблицы.

Длинный ответ

Что такое HOT update?

HOT (Heap-Only Tuple) update — это оптимизация в PostgreSQL, которая позволяет обновлять строки без необходимости обновлять индексы. Это возможно, если обновляемые столбцы не входят ни в один индекс. В таком случае PostgreSQL может просто создать новую версию строки в той же странице (page) и указать на неё через указатель в старой версии, не трогая индексы.

Как updated_at ломает HOT update?

Если поле updated_at индексировано (что часто бывает для сортировки или фильтрации по времени последнего изменения), то при каждом обновлении записи это поле меняется. Поскольку оно входит в индекс, PostgreSQL не может применить HOT update — ему приходится обновлять индекс, что требует дополнительных операций ввода-вывода и может привести к фрагментации.

Пример

-- Создаём таблицу с индексом на updated_at
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name TEXT,
    updated_at TIMESTAMP DEFAULT NOW()
);
CREATE INDEX idx_updated_at ON users (updated_at);

-- Обновление записи
UPDATE users SET name = 'Alice', updated_at = NOW() WHERE id = 1;
-- Здесь updated_at меняется, индекс обновляется, HOT update не работает

Как избежать?

  • Не индексировать updated_at, если это не критично для производительности запросов.
  • Использовать частичные индексы или индексы на выражения, если нужно только для определённых условий.
  • Рассмотреть возможность использования триггеров для обновления updated_at только при изменении других индексированных полей.

Вывод

Индексирование поля updated_at может препятствовать применению HOT update, что снижает производительность операций обновления. Стоит избегать индексации этого поля, если оно обновляется часто и не требуется для быстрого поиска или сортировки.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    7

Навыки

  • SQL

Ключевые слова

#HOT update

#PostgreSQL

#updated_at

#index

#heap-only tuple

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.