Postgresql 当fk列是pk的子集时,主键索引是否将用作外键的索引?

Postgresql 当fk列是pk的子集时,主键索引是否将用作外键的索引?,postgresql,indexing,composite-primary-key,Postgresql,Indexing,Composite Primary Key,我有一个表,其中主键的一部分是另一个表的外键 create table player_result ( event_id integer not null, pub_time timestamp not null, name_key varchar(128) not null, email_address varchar(128), withdrawn boolean not null, place

我有一个表,其中主键的一部分是另一个表的外键

create table player_result (
  event_id        integer not null,
  pub_time        timestamp not null,
  name_key        varchar(128) not null,
  email_address   varchar(128),
  withdrawn       boolean not null,
  place           integer,
  realized_values hstore,
  primary key (event_id, pub_time, name_key),
  foreign key (email_address) references email(address),
  foreign key (event_id, pub_time) references event_publish(event_id, pub_time));
为主键生成的索引是否足以在
event\u id
pub\u time
上备份外键?

索引
A、B、C

有利于:

A

A、B

A、B、C
(以及全部3个字段的任何其他组合,如果默认顺序不重要)

但不适合其他组合(如
B,C
C,A
等)。

索引
A、B、C

有利于:

A

A、B

A、B、C
(以及全部3个字段的任何其他组合,如果默认顺序不重要)

但不适用于其他组合(如
B,C
C,A
等)。

它对参考侧有用,这样,当检查引用行的存在或运行级联更新/删除时,引用表上的
删除
更新
可以使用引用侧的
主键
作为索引。PostgreSQL根本不要求该索引存在,它只是使外键约束检查速度更快

作为对这些列的引用的唯一约束是不够的。无法创建引用播放器结果(事件id、发布时间)的
外键
,,因为这些列上没有
唯一的
约束。只要每对具有不同的
名称\u键
,该对就可以在表中出现多次

正如@xagyg准确地指出的,由外键引用创建的唯一b树索引也仅用于从索引左侧引用列。例如,它不能用于查找
pub\u-time、name\u-key
或仅用于查找
name\u-key

它将对引用方有用,这样,当检查引用行的存在或运行级联更新/删除时,引用表上的
删除
更新
可以使用引用侧的
主键
作为索引。PostgreSQL根本不要求该索引存在,它只是使外键约束检查速度更快

作为对这些列的引用的唯一约束是不够的。无法创建引用播放器结果(事件id、发布时间)的
外键
,,因为这些列上没有
唯一的
约束。只要每对具有不同的
名称\u键
,该对就可以在表中出现多次

正如@xagyg准确地指出的,由外键引用创建的唯一b树索引也仅用于从索引左侧引用列。例如,它不能用于查找
pub\u time、name\u key
或仅
name\u key