【发布时间】:2018-05-20 01:05:33
【问题描述】:
许多像this stackoverflow link 这样的帖子声称PostgreSQL 中没有聚集索引的概念。但是,the PostgreSQL documentation 包含类似的内容。一些人声称它类似于 SQL Server 中的聚集索引。
你知道这两者之间的确切区别是什么吗?
【问题讨论】:
标签: postgresql clustered-index
许多像this stackoverflow link 这样的帖子声称PostgreSQL 中没有聚集索引的概念。但是,the PostgreSQL documentation 包含类似的内容。一些人声称它类似于 SQL Server 中的聚集索引。
你知道这两者之间的确切区别是什么吗?
【问题讨论】:
标签: postgresql clustered-index
聚集索引或索引组织表是一种数据结构,其中所有表数据都按索引顺序组织,通常通过将表组织为 B 树结构.
一旦像这样组织表格,所有未来的数据修改都会自动维护顺序。
PostgreSQL 没有这样的集群索引。 CLUSTER 命令所做的是按照索引的顺序重写表,但表仍然是一个基本无序的堆数据,因此未来的数据修改将不会保持该索引顺序。
如果您想在面对数据修改时保持大致的索引顺序,则必须定期CLUSTER PostgreSQL 表。
PostgreSQL 中的集群可以提高性能,因为在索引扫描期间找到的元组将在堆表中靠得很近,这可以将对堆的随机访问转变为更快的顺序访问。
【讨论】:
CLUSTER 将生成一个新表和一个新索引,它们与以前一样,只是表已重新排序。我扩展了答案以解释性能优势。
CLUSTER 之后,它按索引顺序进行物理排序,但由于 PostgreSQL 行在每次修改时都会移动,因此表不会保持此顺序。与索引“腐烂”的相关性,一段时间后您必须再次运行CLUSTER 才能恢复原状。