62

psql を使用して postgres データベースにアクセスしています。テーブルのメタデータを表示するときに、テーブルのインデックスがクラスター化インデックスかどうかを確認する方法はありますか?

テーブルの PRIMARY KEY はクラスター化インデックスに自動的に関連付けられると聞きましたが、本当ですか?

4

6 に答える 6

53

PostgreSQL では、「クラスター化インデックス」という用語を使用して、SQL Server と漠然と似ているが非常に異なるものを使用していることに注意してください。

特定のインデックスがテーブルのクラスタリング インデックスとして指定されている場合、psql の\dコマンドはクラスタ化されたインデックスを示します。

Indexes:
    "timezone_description_pkey" PRIMARY KEY, btree (timezone) CLUSTER

デフォルトでは、PostgreSQL はクラスタリング インデックスとしてインデックスを指定しません。また、そのように指定された場合でも、クラスター化されたインデックスと関連付けられるようにテーブル データを自動的に配置しません。テーブル データを再編成するには、CLUSTER コマンドを使用する必要があります。

于 2011-01-25T17:17:16.323 に答える
29

PostgreSQL では、クラスタ化された属性は、リレーション自体ではなく、対応するインデックスのメタデータに保持されます。pg_indexカタログのindisclustered属性です。ただし、postgres 内でのリレーションのクラスタリングは 1 回限りのアクションであることに注意してください。属性が true であっても、テーブルへの更新はデータのソートされた性質を維持しません。今日まで、データ クラスタリングの自動メンテナンスは、依然として一般的なTODO項目です。

クラスター化インデックスと統合インデックスは混同されることがよくあります。特に、一般的な教科書では競合する名前が使用されており、postgres と SQL サーバー (2 つだけ挙げると) のマニュアルでも用語が異なっています。統合インデックス(メイン インデックスまたはプライマリ インデックスとも呼ばれます)について話すときは、関連データがインデックスのリーフに含まれているものを意味します。これは、リーフがポイントするインデックス エントリを含む外部インデックスまたはセカンダリインデックスとは対照的です。テーブルレコードに。前者のタイプは必ずクラスター化されます。残念ながら、postgres は後者のタイプのみをサポートしています。とにかく、という事実統合 (プライマリ) インデックスは常にクラスター化されているため、「テーブルの PRIMARY KEY は自動的にクラスター化インデックスに関連付けられる」という考えが生まれている可能性があります。2 つのステートメントは似ているように聞こえますが、異なります。

于 2011-10-17T05:00:30.767 に答える
26

テーブルのインデックスがクラスター化インデックスかどうかを確認する方法はありますか

PostgreSQL にはクラスター化インデックスがないため、それらを表示することはできません。

テーブルの PRIMARY KEY はクラスター化インデックスに自動的に関連付けられると聞きましたが、本当ですか?

いいえ、そうではありません(上記を参照)

インデックスに沿って手動でテーブルをクラスター化することはできますが、これは自動的に維持されるものではありません (たとえば、SQL Server のクラスター化インデックスの場合)。

詳細については、マニュアルのCLUSTERコマンドの説明を参照してください。

于 2011-01-25T17:16:20.660 に答える