【问题标题】:Possible to use a BRIN Index on a Primary Key in PostgreSQL可以在 PostgreSQL 的主键上使用 BRIN 索引
【发布时间】:2019-10-24 20:56:41
【问题描述】:

我正在阅读 PostgreSQL 中的 BRIN 索引,它似乎对我们使用的许多表都有好处。

也就是说,它很好地适用于已经是主键的列,在这种情况下,添加单独的索引将抵消索引带来的部分好处,即节省空间。 p>

PK 是隐式索引的,不是吗?关于这一点,假设 Btree 也是隐式的,是否可以使用 BRIN 而不是 Btree 来完成?

我试过了,果然没用:

create table foo (
  id integer,
  constraint foo_pk primary key using BRIN (id)
)

那么,两个问题:

  1. 可以在 PK 上使用 BRIN 索引吗?
  2. 如果不是,如果我同时拥有 PK 和单独的 BRIN 索引(如果性能对我来说比空间更重要),那么规划者会选择两者中更合适的一个吗?

当然,我对此的理解可能不完整,在这种情况下,我将不胜感激。

【问题讨论】:

    标签: postgresql indexing primary-key


    【解决方案1】:
    1. 主键是 NOT NULL 和 UNIQUE 的逻辑组合,因此只能使用支持唯一性的索引类型。

    来自PostgreSQL documentation(当前版本13):

    目前只有 B-tree 支持唯一索引。

    1. 我不太确定 BRIN 会比 B-tree 快。 It's a lot more space-efficient, but the fact that it's lossy and requires a secondary verification pass erodes any potential speed advantages. 一旦锁定了 B-tree 主键索引,创建二级重叠 BRIN 索引就没有多大意义了。

    【讨论】:

    • 感谢您的精彩解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 2013-01-20
    • 2018-11-01
    • 1970-01-01
    相关资源
    最近更新 更多