【问题标题】:How does PostgreSQL's CLUSTER differ from a clustered index in SQL Server?PostgreSQL 的 CLUSTER 与 SQL Server 中的聚集索引有何不同?
【发布时间】:2018-05-20 01:05:33
【问题描述】:

许多像this stackoverflow link 这样的帖子声称PostgreSQL 中没有聚集索引的概念。但是,the PostgreSQL documentation 包含类似的内容。一些人声称它类似于 SQL Server 中的聚集索引。

你知道这两者之间的确切区别是什么吗?

【问题讨论】:

    标签: postgresql clustered-index


    【解决方案1】:

    聚集索引索引组织表是一种数据结构,其中所有表数据都按索引顺序组织,通常通过将表组织为 B 树结构.

    一旦像这样组织表格,所有未来的数据修改都会自动维护顺序。

    PostgreSQL 没有这样的集群索引。 CLUSTER 命令所做的是按照索引的顺序重写表,但表仍然是一个基本无序的数据,因此未来的数据修改将不会保持该索引顺序。

    如果您想在面对数据修改时保持大致的索引顺序,则必须定期CLUSTER PostgreSQL 表。

    PostgreSQL 中的集群可以提高性能,因为在索引扫描期间找到的元组将在堆表中靠得很近,这可以将对堆的随机访问转变为更快的顺序访问。

    【讨论】:

    • 在 SQL Server 中,一个表的所有列都是聚集索引的一部分;这里也一样吗?如果没有,集群会如何提高性能?
    • 没有。 PostgreSQL 中的CLUSTER 将生成一个新表和一个新索引,它们与以前一样,只是表已重新排序。我扩展了答案以解释性能优势。
    • @LaurenzAlbe 你是说要保留两张表,一张是原始的,一张是有序的列?如果不是,那么我不明白您为什么对第一条评论回答“否”。
    • @LoMaPh 写入表的新副本,并删除旧的副本。新表将像原来的那样有一个普通的堆表;它在物理上像索引一样组织。在CLUSTER 之后,它按索引顺序进行物理排序,但由于 PostgreSQL 行在每次修改时都会移动,因此表不会保持此顺序。与索引“腐烂”的相关性,一段时间后您必须再次运行CLUSTER 才能恢复原状。
    猜你喜欢
    • 2018-05-08
    • 2015-06-14
    • 2013-08-20
    • 2010-11-23
    • 2020-09-17
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    相关资源
    最近更新 更多