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条。
答案 0 :(得分:2)
您的描述建议了四个索引:
top_id, idn_id
top_id, rsc_id
或rcs_id, top_id
top_id, act_id
或act_id, top_id
top_id, tup_id
或tup_id, top_id
这与数据库无关。 Oracle在索引上实现了一种称为“跳过扫描”的功能。这样可以减少索引的数量。
实际上是否需要这些索引实际上取决于top_id
的选择性。如果只有少数几个匹配项,则可能不需要每秒额外的索引。