PostgreSQL索引 - 这些是多余的吗?

时间:2010-08-19 21:58:35

标签: sql postgresql indexing

CREATE INDEX alias_pub_idx2
  ON info.palias
  USING btree
  (publisher_id, player_id, pub_player_id);

CREATE INDEX alias_pub_idx3
  ON info.palias
  USING btree
  (player_id);

第一列包括三列;后者仅包括一个。我认为它们是多余的 - 第一个btree索引就足够了,但我对PostgreSQL索引方法并不十分熟悉。想法?

3 个答案:

答案 0 :(得分:9)

PostgreSQL多列索引是“有序”的,这意味着只有当player_idalias_pub_idx2中提到的第一列时,这才是多余的。

然而,这将是多余的:

CREATE INDEX alias_pub_idx2
  ON info.palias
  USING btree
  (publisher_id, player_id, pub_player_id);

CREATE INDEX alias_pub_idx3
  ON info.palias
  USING btree
  (publisher_id); /* first column of another index => waste of space */

答案 1 :(得分:0)

这两个索引都没有使另一个多余 - 如果publisher_id不是一个标准,那么查找特定player_ids的info.palias查询将优先于第一个索引。

答案 2 :(得分:0)

  

使用btree

BTREE indexes are ordered,这就是你的第二个索引是多余的原因:第一列是相同的,可以在所有查询中使用,其中player_id是一个条件。