索引所有作为表外键的列

时间:2018-07-13 11:48:58

标签: sql postgresql database-indexes

                              Table "public.policy"
 Column |  Type   | Collation | Nullable |                Default
--------+---------+-----------+----------+----------------------------------------
 pol_id | bigint  |           | not null | nextval('policy_pol_id_seq'::regclass)
 top_id | integer |           |          |
 idn_id | integer |           |          |
 rsc_id | integer |           |          |
 act_id | integer |           |          |
 tup_id | integer |           |          |

我的表结构是这个,除pol_id之外的所有列都是外键。搜索策略可以在任何列上进行,但将与top_id一起进行。例如;搜索具有top_id = 1和act_id = 2的策略。 如何更好地索引该表?只索引top_id还是可以索引所有列是可以的。 这是一个交易表。该表中的记录最多可以达到一百万到2条。

1 个答案:

答案 0 :(得分:2)

您的描述建议了四个索引:

  • top_id, idn_id
  • top_id, rsc_idrcs_id, top_id
  • top_id, act_idact_id, top_id
  • top_id, tup_idtup_id, top_id

这与数据库无关。 Oracle在索引上实现了一种称为“跳过扫描”的功能。这样可以减少索引的数量。

实际上是否需要这些索引实际上取决于top_id的选择性。如果只有少数几个匹配项,则可能不需要每秒额外的索引。