【问题标题】:Cluster and Non cluster index in PostgreSQLPostgreSQL 中的集群和非集群索引
【发布时间】:2015-03-14 17:10:09
【问题描述】:

我正在使用 PostgreSQL 9.3 版本创建数据库。

我有一些列列表的下表测试。

create table test
(
  cola varchar(10),
  colb varchar(10),
  colc varchar(10),
  cold varchar(10)
);

现在我想在某些列上创建索引。

例如:

我想为列 colacolb 创建聚集索引。

我想为列 colccold 创建非聚集索引。

当我提到 thisthis 时,我知道 PostgreSQL 中没有聚集索引和非聚集索引。

我的问题:我可以使用什么类型的索引来代替 PostgreSQL 中的聚集索引和非聚集索引,与聚集索引和非聚集索引的作用相同?

【问题讨论】:

  • Postgres 中的每个索引都是“非聚集的”。 Postgres 没有聚集索引。如果您运行create index,它将创建一个(非聚集)B-Tree 索引。为什么你认为没有非聚集索引?
  • @a_horse_with_no_name,好的!我的错。但是如何创建聚集索引呢?
  • 正如我所说:Postgres 没有聚集索引。所以你不能创建一个。为什么你认为你需要一个?
  • @a_horse_with_no_name,所以create index 在 PostgreSQL 中完成了这两项工作。
  • 创建非聚集索引,因为 Postgres 没有聚集索引

标签: postgresql indexing postgresql-9.3


【解决方案1】:

我的问题:我可以使用什么类型的索引来代替 PostgreSQL 中的聚集索引和非聚集索引,与聚集索引和非聚集索引的作用相同?

PostgreSQL 根本没有聚集索引的概念。相反,所有表都是堆表,所有索引都是非聚集索引。

当您通常创建聚集索引时,只需创建一个非聚集索引即可。

更多细节:

【讨论】:

  • @mak:我也觉得 Markus 的这个博客很有趣:use-the-index-luke.com/blog/2014-01/…
  • @a_horse_with_no_name,是的!是的。
  • 看来 Postgres 实现了至少近似于 聚集索引 的东西:“CLUSTER 指示 PostgreSQL 根据 index_name 指定的索引对 table_name 指定的表进行集群”来自postgres 文档:postgresql.org/docs/9.1/static/sql-cluster.html
  • @mangotang 见this related question。简而言之,CLUSTER 基于特定索引重新组织表中的当前数据,但不会创建不同的数据结构或保持该顺序。
  • @IMSoP 感谢您的澄清。通过说 postgres“近似聚集索引”,我试图清楚它实际上 不是聚集索引,但 可能成为一个可行的选择。
猜你喜欢
  • 2014-08-19
  • 1970-01-01
  • 2011-09-12
  • 2011-11-28
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
  • 2019-02-09
  • 2020-08-08
相关资源
最近更新 更多