2017-06-01 49 views
0

PG中的索引是否存儲某種類型的行內部標識,或存儲該行的主鍵?PostgreSQL索引如何引用行?

我推斷它必須是一個內部行ID,因爲表不必PK。但是,我找不到這個問題的具體答案。

回答

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答案](https://dba.stackexchange.com/a/84859/1822)和[這篇Postgres wiki文章](https://wiki.postgresql.org/wiki/Index-only_scans#Interaction_with_HOT) –