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


9

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

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

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

どうもありがとう!

回答:


9

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.