postgres 外键是否意味着索引?

问题描述 投票:0回答:1

我有一个 postgres 表(我们称这个表

Events
),带有另一个表的复合外键(我们称这个表
Logs
)。事件表如下所示:

CREATE TABLE Events (
   ColPrimary UUID,
   ColA VARCHAR(50),
   ColB VARCHAR(50),
   ColC VARCHAR(50),
   PRIMARY KEY (ColPrimary),
   FOREIGN KEY (ColA, ColB, ColC) REFERENCES Logs(ColA, ColB, ColC)
);

在这种情况下,我知道我可以通过主键有效地搜索事件,并加入日志。

我感兴趣的是这个外键是否在事件表上创建一个索引,即使没有连接也很有用。例如,以下查询会从 FK 中受益吗?

SELECT * FROM Events
WHERE ColA='foo' AND ColB='bar'

注意:我已经针对与此非常相似的情况运行了 POSTGRES EXPLAIN,并看到查询将导致全表扫描。我不确定这是否是因为 FK 对这个查询没有帮助,或者我的数据量很小并且扫描在我当前的规模下更有效。

postgresql indexing foreign-keys database-performance
1个回答
47
投票

PostgreSQL 不会自动在定义了外键的列上创建索引。如果您需要这样的索引,则必须自己创建它。

拥有这样的索引通常是一个好主意,这样对影响引用列的父表的修改就可以高效。

© www.soinside.com 2019 - 2024. All rights reserved.