我有多个时间序列表,timestamp
列上有 Pkey。
BRIN
如果我将索引更改为 而非 ,我想测试性能改进BTREE
。
然而,我还想对该timestamp
列有一个唯一的约束(据我所知是基于BTREE
)。
我有什么选择?
- 我应该添加额外的
BRIN
索引吗BTREE
?在这种情况下,在搜索/连接期间将选择哪个索引? - 我应该删除 pkey 并仅添加
UNIQUE
约束吗?在这种情况下,它将如何运作?
我的使用场景是,我需要在timestamp
列上运行 FULL OUTER JOIN,以便从多个表一起进行查询,这些查询有时可能会运行 30 分钟或更长时间。
BRIN 索引与 B 树索引具有相同的用途(只是它更小且搜索效率更低),因此将两者放在同一列上毫无意义。只是不要创建 BRIN 索引,它是多余的。
PostgreSQL 可能仍然会选择 BRIN 索引(如果您执行导致许多行的范围扫描),但我认为您不会赢得很多,而且最好不要增加额外索引的维护成本。
主键是唯一约束(带有附加
NOT NULL
约束),因此第二个问题没有实际意义。