使用复合主键元素在SELECT上的性能

时间:2013-01-07 13:51:12

标签: database performance postgresql select composite-primary-key

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

如果我执行SELECT * FROM table WHERE el1 IN(...)之类的选择操作,操作是否会考虑主键包含el1的事实,或者它会更慢,因为没有可以帮助的索引?

感谢。

2 个答案:

答案 0 :(得分:1)

根据PostgreSQL documentation

  

多列B树索引可以与查询条件一起使用   涉及索引列的任何子集,但索引最多   在领先(最左边)有限制时有效   列。确切的规则是对领导的平等约束   列,以及第一列上的任何不等式约束   没有等式约束,将用于限制部分   扫描的索引。

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

答案 1 :(得分:0)

Postgres - 以及我所知道的每个SQL引擎 - 都可以使用多字段索引中的前一个或多个字段。在您的情况下,索引所在的位置(el1,el2,el3),它可以使用索引作为“where el1 = x”或“where el1 = x和el2 = y”的查询。

如果您没有为el1指定值,则无法使用索引。就像“select ... where el2 = y”一样,索引也没用。