HOTは、この長年にわたるジレンマとも言えるPostgreSQLの問題点(の一部)を解決しようとするものである。
HOTでは、更新処理の際、更新対象の列にインデックスが張られていない場合、それ以外の列にインデックスが張ってあっても、インデックスタプルを追加しない。これによって、インデックスの肥大化を防ぐことができる。
一方、テーブル本体においては、更新の際に古い行を残し、新しい行を追加するというのは以前と基本的に同じ※だ。
※「更新対象の列にインデックスが張られていない」という条件で追加された行は「Heap Only Tuple」と呼ばれ、通常の行とは違う扱いを受ける。以後説明のために、このような性質を持った行を「HOT行」と呼ぶことにする("Tuple"も行に対応するので、ちょっとおかしいが、他に良い呼び方を思いつかなかった)。
HOTが従来と違うのは、VACUUMをかけなくても、参照されなくなった古い行が回収されるという点だ。
HOT行が含まれるブロックが検索や更新処理で参照されると、その都度、HOT行の連鎖を辿って、各HOT行が不要かどうかをチェックする。もし不要ならば最も古い行から最新の行にリンクを張り直す。これを枝刈り(pruning)と呼ぶ。これにより、HOTではUPDATE連鎖を短かく維持できるので、この点でも性能的に有利だ。
枝刈りされたデッドタプルは、ブロックの中央にあるフリースペースに移動され、以後再利用できるようにする。これを非断片化(defragmentaion)と言う。これはVACUUMが行う処理と同じであり、その意味でもHOTは「局所的なVACUUMを内部的に実行している」と言えるだろう。