首页 > 解决方案 > BRIN 索引创建

问题描述

我正在尝试使用 BRIN 索引,并且我想确保在创建索引之前对我的数据进行排序。

在 PostgreSQL和Postgres中的表行更改顺序中提出的所有要点都 选择 BTREE 而不是 BRIN 索引 帖子、评论和答案,最好在您的列上放置一个 order by 子句,执行 BRIN 索引,然后转关闭对表的约束。一旦约束消失,这是否有效并保持 BRIN 索引(索引不会爆炸)?

看起来我无法让 BRIN 索引对我的查询产生任何积极的性能影响,因为第二个链接的发布者已经注意到了。第一个链接中的答案似乎是一种可能的方法,但是在创建或更改表时,我找不到如何通过对列的约束来添加顺序。

标签: postgresqldatabase-indexes

解决方案


表没有ORDER BY子句。

你唯一能做的就是使用CLUSTER命令按照某个索引的顺序重写一个表。由于 BRIN 索引仅在排序完美的情况下才有效,因此只要对数据库没有更多修改,您就可以使用 BRIN 索引。这里的例外是INSERTs 的顺序正确(例如,如果 BRIN 索引位于始终递增的时间戳上)。

所以 BRIN 索引只对数据没有被修改的数据仓库和时间序列有用。它们也不能用来支持ORDER BY.

如果有疑问,请使用 B 树索引。


推荐阅读