web-dev-qa-db-ja.com

PostgreSQLはディスク上の新しいレコードを物理的にどのように配列しますか(主キーのクラスターの後)?

PostgreSQLがディスク上のレコードをどのように並べるかを知る必要があります。この場合、 ドキュメントに記載されているインデックスの組み合わせ を利用したいと思います。これは、ビットマップを使用して一致する行を取得し、物理的な場所に従ってそれらを返すことを理解しています。問題のテーブルは、主キーによってクラスター化されています。

私が理解しているように、PostgreSQLはクラスタリングが終了した後、自動的にクラスタリングを続行しません(ただし、特定のインデックスに従ってクラスタリングされたことを覚えています)。さて、これが主キーなので、物理的なストレージの順序はそれに従っているのでしょうか(これがtrueの場合は、特定のクエリに有利に使用したいと思います)。

要約すると、特にクラスタリングの後で、PostgreSQLは新しいレコードをどのように並べますか?

どうもありがとう!

9

Postgresqlの行には固定された順序はありません。空きスペースがある場所にレコードが配置されるだけでなく、レコードも移動できます。これは、行が更新されると、新しいバージョンの行が新しい場所に作成され、古いバージョンはバキュームによって削除されるまで古い場所に引き続き存在するためです。

CLUSTER操作はすべての行をソートしますが、実際にpostgresqlが行を追加する方法には影響しません。そのため、データは並べ替えられません。ただし、postgresqlは統計を保持します。その中には、テーブルの行の順序とソートされた列の順序との間の各列の相関があります。したがって、プランナは、クラスタ操作後にいくつかの行が追加された(または更新によって移動された)場合でも、テーブルがほとんどソートされていることを示す統計に基づいて、計画を最適化できます。

9
Eelke