Postgresql

PostgreSQL 中的 CLUSTER USING 表的非集群程度如何

  • June 1, 2014

我有一些表從Postgres SQL 中的CLUSTER ON/CLUSTER USING中受益匪淺:

# CLUSTER table USING index_name;
# ANALYZE VERBOSE table;
# CLUSTER VERBOSE;

維護任務會定期執行 CLUSTER VERBOSE 以保持最新狀態。但是在執行 CLUSTER VERBOSE 之前,我可以執行一個測試來查看表的碎片程度嗎?也許是這樣的:

# CLUSTER ANALYZE
table 40000 records. 4000 observed clusters, 5000 potential clusters (20% fragmentation)

請注意,我使用 CLUSTER,因此同時訪問的數據被“碎片整理”為少量磁碟塊。例如,每個頁面都有數千個屬性。aCLUSTER page_attribute USING page_id;將所有屬性並排放置,大大減少了磁碟負載。

我不完全確定這些資訊有多大幫助,但係統表pg_stats包含一correlation列:

select schemaname,tablename,attname,correlation 
from pg_stats 
where schemaname='public' 
order by correlation;

從手冊

物理行排序和列值的邏輯排序之間的統計相關性。範圍從 -1 到 +1。當值接近 -1 或 +1 時,由於減少了對磁碟的隨機訪問,估計列上的索引掃描比接近零時便宜。(如果列數據類型沒有 < 運算符,則此列為空。)

這個值是基於每列的,所以我的猜測是,如果第一個索引列的相關性接近於零,則表是“未聚集的”,如果接近 -1 或 1,它更接近於索引,因此“更聚集”。如果課程只能適用於定義為 ASC 的 B-Tree 索引(我猜)。

引用自:https://dba.stackexchange.com/questions/42368