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

Wel*_*lls 1 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);
Run Code Online (Sandbox Code Playgroud)

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

Kea*_*eks 9

PostgreSQL多列索引是"有序"的,这意味着只有在player_id提到的第一列时才会是多余的alias_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 */
Run Code Online (Sandbox Code Playgroud)