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