postgresql - 可以在 PostgreSQL 的主键上使用 BRIN 索引
问题描述
我正在阅读 PostgreSQL 中的 BRIN 索引,它似乎对我们使用的许多表都有好处。
也就是说,它很好地适用于已经是主键的列,在这种情况下,添加单独的索引将抵消索引的部分好处,即节省空间。
PK 是隐式索引的,不是吗?关于这一点,假设 Btree 也是隐式的,是否可以使用 BRIN 而不是 Btree 来完成?
我试过这个,正如预期的那样它不起作用:
create table foo (
id integer,
constraint foo_pk primary key using BRIN (id)
)
所以,两个问题:
- 可以在 PK 上使用 BRIN 索引吗?
- 如果不是,如果我同时拥有 PK 和单独的 BRIN 索引(如果性能对我来说比空间更重要),规划者会选择两者中更合适的吗
当然,我对此的理解可能是不完整的,在这种情况下,我将不胜感激。
解决方案
- 主键是 NOT NULL 和 UNIQUE 的逻辑组合,因此只能使用支持唯一性的索引类型。
来自PostgreSQL 文档(当前版本 13):
目前只有 B-tree 支持唯一索引。
- 我不太确定 BRIN 会比 B-tree 快。它更节省空间,但它有损并且需要二次验证通过这一事实削弱了任何潜在的速度优势。一旦锁定了 B-tree 主键索引,创建二级重叠 BRIN 索引就没有多大意义了。
推荐阅读
- ruby-on-rails - Ruby on Rails 测试 - ActiveRecord::StatementInvalid: PG::InvalidTextRepresentation: ERROR: malformed array literal:
- python - 如何将 Python 中的加权边缘列表转换为一般边缘列表?
- prestashop-1.6 - 产品名称中的正则表达式问题(TPL prestashop 1.6)
- javascript - 如何在javascript中减去两个时间字符串(HH:MM)?
- xpath - 如何使用机器人框架获取 div 的最后一个定位器
- c# - 是否可以使用 ef core 和迁移来做全索引表?
- servlets - 为 Servlet 编写单元测试用例
- r - 无法在 R Studio 中安装包
- javascript - insertAdjacentHtml 和 insertAdjacentElement 有什么区别?
- python - 仅对数组的 n 个最佳值计算最小二乘