Lesson 7 of 12

HOT Updates: How PostgreSQL Avoids Index Writes

Applies to PostgreSQL 13–17 Last reviewed May 2026 Grounded in source

The one thing to understand first

Because of MVCC, every UPDATE writes a new tuple version. Naively, that new version needs a new entry in every index on the table — even indexes on columns that did not change. On a wide, heavily-indexed, update-heavy table, that index maintenance dominates write cost and generates index bloat. HOT (Heap-Only Tuple) updates exist to avoid it.

If an update touches no indexed column and the new version fits on the same page, Postgres skips all index writes — so HOT eligibility is the single biggest lever on write cost for hot tables. Everything in this lesson is about engineering your schema so updates stay HOT-eligible.

The key insight

If an update changes no indexed column, then every index entry would point to a row whose indexed values are unchanged. So PostgreSQL can skip creating new index entries entirely — provided it can still find the new version starting from the old index pointers. HOT achieves this by keeping the update within a single heap page and chaining versions with line pointers.

This is a Pro lesson

Get every Learning Pathway and cookbook recipe — grounded in PostgreSQL source code, with diagnostics, fixes, and prevention for each topic.

Continue this lesson to learn:

  • How a HOT update works
  • The two conditions for HOT
  • fillfactor: reserving room
  • Page pruning keeps chains short
  • Layer 3 — Watch it happen on your own database
  • Layer 4 — The levers this hands you
  • All 36 Learning Pathway lessons
  • 170+ cookbook recipes
  • Source-grounded diagnostics & fixes

Secure checkout Cancel anytime Source-grounded

Was this helpful?

← Back to 02 — Performance: Query & Index Mastery