需要知道 PostgreSQL 如何对磁盘上的记录进行排序。在这种情况下,我想利用文档中所述的索引组合,据我所知,它使用位图来获取匹配的行并根据它们的物理位置返回它们。有问题的表已按其主键聚集。
据我了解,PostgreSQL 在集群完成后不会自动继续进行集群(尽管它确实记得它是根据某个索引进行集群的)。现在,由于这是主键,我想知道物理存储顺序是否会根据这个顺序(如果是真的,我想利用我们的优势进行特定查询)。
总之,PostgreSQL 如何对其新记录进行排序,尤其是在集群之后?
非常感谢!
postgresql 中的行没有固定的顺序。不仅记录放置在有空闲空间的地方,记录也可以四处移动。这是因为当更新行时,会在新位置创建该行的新版本,而旧版本继续存在于其旧位置,直到它被真空移除。
CLUSTER 操作对所有行进行排序,但确实不影响 postgresql 添加行的方式。所以数据不会保持排序。但是 postgresql 会保留统计信息,其中包括表中行的顺序与该列的排序顺序之间的每一列的相关性。因此,即使在集群操作之后添加了一些行(或已被更新移动),规划器仍然可以根据统计信息优化它的计划,这些统计信息告诉它表仍然大部分是排序的。