1

我正在使用 PostgreSQL 8.1,并且我有一个包含 3 个元素且没有其他索引的复合主键的表: PRIMARY KEY (el1, el2, el3)

如果我进行像 SELECT * FROM table WHERE el1 IN (...) 这样的选择操作,该操作会考虑到主键包含 el1 的事实,还是会因为没有索引可以提供帮助而变慢?

谢谢。

4

2 回答 2

2

根据PostgreSQL 文档

多列 B 树索引可用于涉及索引列的任何子集的查询条件,但当前导(最左侧)列存在约束时,索引效率最高。确切的规则是前导列上的等式约束,加上没有等式约束的第一列上的任何不等式约束,将用于限制扫描的索引部分。

您还可以尝试对查询运行解释计划以确定此行为。

于 2013-01-07T14:13:43.423 回答
0

Postgres——以及我所知道的每个 SQL 引擎——都可以使用多字段索引中的第一个或多个字段。在您的情况下,索引在(el1,el2,el3)上,它可以将索引用于“其中 el1=x”或“哪里 el1=x 和 el2=y”之类的查询。

如果你不给 el1 赋值,它就不能使用索引。就像“select ... where el2=y”一样,索引是没用的。

于 2013-01-07T14:13:13.300 回答