PostgresのTABLESAMPLEは行ではなくアドレスを選ぶ

Tablesample Picks Rows

PostgresのTABLESAMPLEは行ではなくアドレスを選ぶ

TABLESAMPLEはページ番号や行ポインタをハッシュして一部だけを読むため、巨大テーブルでも高速に概算できる。ただしSYSTEMはページ単位で選ぶので、時系列順に並んだデータではサンプルが短い区間に固まり、平均や最小値が大きく偏る。REPEATABLEでシードを固定しても、UPDATEやVACUUM FULLで行のアドレスが変われば結果は保証されない。主キーのハッシュで絞る方法なら安定する。

TABLESAMPLEについて奇妙に見えることはすべて、ひとつの事実に由来する。それは行を選ぶのではなく、アドレスを選ぶということだ。

この日のほかの記事

2026-10-25