PostgreSQL如何物理排序磁盘上的新记录(在主键上的集群之后)?


9

需要知道PostgreSQL如何排序磁盘上的记录。在这种情况下,我想利用docs中所述索引组合,据我所知,它使用位图来获取匹配的行并根据其物理位置返回它们。该表已通过其主键进行了聚类。

据我了解,PostgreSQL在聚类完成后不会自动继续进行聚类(尽管它确实记得它是根据某个索引进行聚类的)。现在,由于这是主键,所以我想知道物理存储顺序是否符合该顺序(如果为true,我想利用它来进行特定查询)。

总之,PostgreSQL如何排序其新记录,尤其是在集群之后?

非常感谢!

Answers:


9

postgresql中的行没有固定的顺序。记录不仅放置在有可用空间的地方,而且记录也可以移动。这是因为更新行时,将在新位置创建该行的新版本,而旧版本将继续保留在其旧位置中,直到被真空删除为止。

CLUSTER操作对所有行进行排序,但实际上并不影响postgresql添加行的方式。因此,数据将不会保持排序。但是postgresql保留统计信息,其中包括表中各行的顺序与该列的排序顺序之间各列的相关性。因此,即使在集群操作后添加了某些行(或已通过更新将其移动了),计划者仍可以根据统计信息优化其计划,该统计信息告诉该表仍是大部分排序的表。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.