如何判断 Postgres table 何时集群以及使用了哪些索引

How to tell when a Postgres table was clustered and what indexes were used

我对集群实现的性能改进印象深刻,但对它花费的时间却没有印象。

我知道如果 table 或分区在集群后更改,则需要重建集群,但除非我记下上次集群 table 的时间,否则我怎么能告诉我什么时候需要再做一次?

我可以使用这个查询来告诉我什么 table(s) 有一个或多个聚簇索引

SELECT *
FROM   pg_class c
JOIN   pg_index i ON i.indrelid = c.oid
WHERE  relkind = 'r' AND relhasindex AND i.indisclustered 

我的问题是。

我注意到重新构建聚簇索引所花的时间与最初构建它所花的时间一样长(即使在此期间未触及 table) .所以我想避免重新聚类,除非我知道 table 需要它。


为清楚起见更新(我希望)

如果我使用这个命令....

CLUSTER tableA USING tableA_idx1;

要判断哪个索引最后用于 table 集群,请使用 pg_index 系统目录。

在 table 中查询属于您的 table 的所有索引,并查看哪个索引设置了 indisclustered。一个 table 一次只能由一个索引聚类。

无法找出 何时 table 最后一次聚类,但这无论如何都不是很有趣。你想知道的是集群仍然有多好。

要找到它,请在 pg_stats 行中查询您聚类的列。如果correlation接近1,你还是不错的。值越小,表示聚类越多。