Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: PostgreSQL, HOT update, index, heap, MVCC

Почему изменение индексируемого поля отключает HOT update?

Вопрос проверяет понимание механизма HOT (Heap Only Tuple) update в PostgreSQL и причин, по которым изменение индексируемого поля блокирует его использование.

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

HOT update позволяет обновлять строки без изменения индексов, если обновляемые поля не входят ни в один индекс. Если изменяется индексируемое поле, PostgreSQL вынужден создать новую запись в индексе, что делает HOT update невозможным. Это связано с тем, что индекс должен указывать на новую версию строки, и без обновления индекса поиск по нему будет некорректным.

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

Что такое HOT update?

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

Почему изменение индексируемого поля отключает HOT?

Если обновление затрагивает поле, которое входит в индекс, то индекс должен быть обновлен, чтобы указывать на новую версию строки. В противном случае, при поиске по индексу, PostgreSQL найдет старую запись, которая указывает на устаревшую версию строки. Это приведет к некорректным результатам запросов. Поэтому, когда изменяется индексируемое поле, HOT update не применяется, и PostgreSQL выполняет полное обновление индекса.

Пример

CREATE TABLE users (id INT PRIMARY KEY, name TEXT, email TEXT);
CREATE INDEX idx_email ON users(email);

-- HOT update возможен, так как name не индексирован
UPDATE users SET name = 'Alice' WHERE id = 1;

-- HOT update невозможен, так как email индексирован
UPDATE users SET email = 'alice@example.com' WHERE id = 1;

Вывод

HOT update — полезная оптимизация для снижения нагрузки на индексы при обновлении неиндексированных полей. Однако, при изменении индексируемых полей, необходимо выполнять полное обновление индекса, что увеличивает затраты на запись. Это важно учитывать при проектировании схемы базы данных и выборе индексов.

  • Аватар

    Python Guru

    Sergey Filichkin

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

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Postgres

    Postgres

  • SQL

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

#PostgreSQL

#HOT update

#index

#heap

#MVCC

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

  • Аватар

    Python Guru

    Sergey Filichkin

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