【发布时间】:2019-11-30 17:41:11
【问题描述】:
所以我想了解一下 postgresql 中的索引,到目前为止我已经了解索引有助于更快地查询并且所有主键都有索引,我想知道是否所有外键(指主键另一个表的)也应该有一个索引,还是只是我们正在查询的表中的属性需要索引?
谢谢。
【问题讨论】:
标签: sql postgresql indexing foreign-keys
所以我想了解一下 postgresql 中的索引,到目前为止我已经了解索引有助于更快地查询并且所有主键都有索引,我想知道是否所有外键(指主键另一个表的)也应该有一个索引,还是只是我们正在查询的表中的属性需要索引?
谢谢。
【问题讨论】:
标签: sql postgresql indexing foreign-keys
索引应该主要基于正在使用的查询。如果您要通过外键进行过滤、聚合或排序,那么它作为索引是明智的。
另一个用途是使用索引来强制执行唯一约束。
换句话说,没有规定外键应该总是被索引。这通常是个好主意,但这取决于您要运行的查询。
【讨论】:
索引外键不是强制性的。但是,如果您曾经从被引用的表中删除,或者以更改主键的方式对其进行更新,那么它将必须通过外键列搜索引用表中的行,以确保它不会违反(或将它们设置为空,或删除它们,具体取决于外键中定义的操作)。如果外键列上没有索引,这可能会很慢。
此外,您可能希望运行诸如“显示此主行的所有详细行”之类的查询,并且不使用也会很慢的索引。
如果您从不从引用的表中删除并且从不运行这种查询,那么您可能不需要索引。
【讨论】: