2017-06-01 7 views
0

PG内のインデックスは、ある種の行内部IDを格納するか、行の主キーを格納しますか?PostgreSQLは参照行をどのように索引付けしますか?

私はテーブルがPKを持っている必要はないので、それは内部行IDでなければならないと推測しています。しかし、私はこの質問に特定の答えを見つけることができません。

答えて

1

各行にはシステム列ctid(Oracleのrowidに非常に似ています)に格納された内部「アドレス」があります。このctid値はインデックスに格納されます。

詳細は、マニュアルにあります。

したい場合は、列を選択することができます

select ctid, t.* 
from your_table t; 
+0

だから、行意志へのアップデートctidが変更されるため、インデックスの更新が必要です。 – IamIC

+1

@IamIC:更新によってインデックス付きの列が変更された場合のみです。そうでない場合、Postgresは "HOT"(ヒープ専用タプル)アップデートを使用することができます:https://github.com/postgres/postgres/blob/master/src/backend/access/heap/README.HOT参考:[this answer](https://dba.stackexchange.com/a/84859/1822)と[このPostgres wikiの記事](https://wiki.postgresql.org/wiki/Index-only_scans#Interaction_with_HOT) –

関連する問題